题目:创建两个线程模拟火车站两个窗口售票程序,窗口售票时间为1秒,两个窗口不能同时售票
#include<Windows.h>
#include<iostream>
using namespace std;
//这是2个线程模拟买火车票的小程序
DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data
int index = 0;
int tickets = 10;
HANDLE hMutex;
int main()
{
HANDLE hThread1;
HANDLE hThread2;
//创建线程
hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
//创建互斥对象
hMutex = CreateMutex(NULL, TRUE, "tickets");
if (hMutex)
{
if (ERROR ALREADY EXISTS == GetLastError())
{
cout << "only one instance can run!" << endl;
return 0;
}
}
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
Sleep(4000);
return 0;
}
//线程1的入口函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (true)
{
ReleaseMutex(hMutex);
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0)
{
Sleep(1);
cout << "thread1 sell ticket:" << tickets-- << endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
//线程2 的入口函数
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (true)
{
ReleaseMutex(hMutex);
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0)
{
Sleep(1);
cout << "thread2 sell ticket:" << tickets-- << endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。