多线程火车票售票系统——互斥对象实现线程同步
来源:互联网 发布:centos查看uuid 编辑:程序博客网 时间:2024/05/05 15:42
1、利用互斥对象实现线程同步
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int index = 0;
int tickets = 100;
HANDLE hMutex; //全局互斥对象句柄
void main()
{
HANDLE hThread1;
HANDLE hThread2;
DWORD dwThreadID1; //线程ID
DWORD dwThreadID2;
hThread1 =CreateThread(NULL,0,Fun1Proc,NULL,0,&dwThreadID1);
hThread2 =CreateThread(NULL,0,Fun2Proc,NULL,0,&dwThreadID2);
CloseHandle(hThread1);
CloseHandle(hThread2);
hMutex = CreateMutex(NULL,false,NULL); //创建互斥对象,第二个参数为false,表示该线程不拥有此互斥对象。第三个参数,表示创建匿名的互斥对象。
Sleep(4000); //让主线程放弃执行,不退出。进入等待状态,不占用CPU。
return;
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hMutex,INFINITE);//请求互斥对象。
if (tickets > 0)
{
Sleep(1);
cout<<"thread1 sell tickets:"<<tickets--<<endl;
}
else
{
break;
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hMutex,INFINITE);//请求互斥对象。
if (tickets > 0)
{
Sleep(1);
cout<<"thread2 sell tickets:"<<tickets--<<endl;
}
else
{
break;
}
ReleaseMutex(hMutex);
}
return 0;
}
2、互斥对象:mutex,确保多个线程对单个资源的互斥访问。
3、WaitForSingleObject返回的条件:(1)hMutex变成有信号状态。(2)第二个参数表示超时时间。0表示立即返回.INFINITE表示会一直等,只到等到有信号。还可以设置个等待时间。
4、释放互斥对象: ReleaseMutex()。如果线程终止了,但是没有释放,则操作系统会将互斥对象的引用计数置为0.这样其他请求该互斥对象的线程就可以获得该互斥对象了。可以通过返回值来判断是怎么获得该互斥对象的。
5、此程序在双核CPU上会有问题,关闭一个核心后就OK了。关闭核心的方法:点击“开始”菜单→运行→输入 msconfig 打开“系统配置实用程序” 选择 BOOT.INI 选项卡→点击“高级选项”按钮
/NUMPROC(N)= 这个前面打钩 后面的选择1,然后点“确定”保存 重启电脑即可
单核,只有一个线程在执行,双核,同时可以有两个线程执行。
6、命名互斥对象:hMutex = CreateMutex(NULL,false,“tickets”); 可以通过GetLastError(),来保证只有一个实例运行。
- 多线程火车票售票系统——互斥对象实现线程同步
- 多线程火车票售票系统——自动重置事件对象实现线程同步
- Java多线程4—线程同步问题+火车票售票系统
- Java多线程4—线程同步问题+火车票售票系统
- 多线程火车票售票系统——人工重置事件对象实现线程同步(会有问题的)
- 多线程火车票售票系统——临界区实现线程同步
- 同步与互斥经典案例——模拟火车票售票系统
- 多线程程序框架-利用互斥对象实现线程同步
- 多线程实例入门--利用互斥对象实现线程同步
- 多线程同步互斥实例——使用synchronized实现线程通信和互斥
- 多线程同步互斥实例——使用synchronized实现线程通信和互斥
- Windows多线程总结(3)-- 线程同步(使用互斥对象实现线程同步)
- 利用互斥对象实现线程同步
- 利用互斥对象实现线程同步
- 互斥对象实现线程同步
- 使用互斥对象实现线程同步
- 利用互斥对象实现线程同步
- 利用互斥对象实现线程同步
- CppUnit 使用指南
- @TableGenerator
- Android平台软件体系浅注
- UVA 11889 Benefit(公约公倍)
- 【达达】写在清明节之前
- 多线程火车票售票系统——互斥对象实现线程同步
- 语言栏不见了怎么办?
- include/linux/mmzone.h
- 获取CEdit内容的7种方法
- Problem G
- Silverlight_5_Toolkit_December_2011 安装后点击Toolkit Samples没反应的解决方法
- Android系统设置apk
- C-DOCSIS Service Flows
- include/linux/gfp.h