標籤:
題目:建立兩個線程類比火車站兩個視窗售票程式,視窗售票時間為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;
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
建立兩個線程類比火車站兩個視窗售票程式