建立兩個線程類比火車站兩個視窗售票程式

來源:互聯網
上載者:User

標籤:

題目:建立兩個線程類比火車站兩個視窗售票程式,視窗售票時間為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;
}

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

建立兩個線程類比火車站兩個視窗售票程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.