//WINAPI--多线程与互斥锁(销票系统)
#include
#include
int tickets = 20;//20张车票
HANDLE hMutex = NULL;//互斥锁
//分两个窗口进行售票,一个是普通窗口,一个是VIP窗口
//VIP窗口
DWORD WINAPI VIPWin(LPVOID lpParam)
{
while(1)
{
WaitForSingleObject(hMutex, INFINITE);//等候获取互斥锁
if(tickets > 0)//只要票数大于零
{
Sleep(500);//临时外出
printf("VIP窗口售出第%d张票!\n", tickets--);
}
else
break;//没有票了,就关闭该窗口
//Sleep(200);//VIP窗口每200毫秒可以售出一张票
ReleaseMutex(hMutex);//释放互斥锁
}
}
int main( void )
{
//为了让两个窗口实现同时卖票,所以要使用多线程技术
HANDLE hThread = NULL;
//创建互斥锁
// 初始时没有所有者
hMutex = CreateMutex(NULL, FALSE, NULL);
//参数:1.默认安全属性 2.默认栈大小 3.线程处理函数 4.处理函数的参数 5.立即执行 6.匿名线程
hThread = CreateThread(NULL, 0, VIPWin, NULL, 0, NULL);
//普通窗口
while(1)
{
WaitForSingleObject(hMutex, INFINITE);//等候获取互斥锁
if(tickets > 0)//只要票数大于零
{
Sleep(500);//普通窗口每500毫秒可以售出一张票
printf("普通窗口售出第%d张票!\n", tickets--);
}
else
break;//没有票了,就关闭该窗口
ReleaseMutex(hMutex);//释放互斥锁
}
return 0;
}
微信号:
Fengshadow1
编程免费资料
有你想要