簡單多執行緒示例
阿新 • • 發佈:2018-11-22
#include<Windows.h>
#include<iostream>
using namespace std;
DWORD WINAPI Fun1Proc(LPVOID lpParameter);//定義執行緒入口函式(規定格式)
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int index = 0;
int tickets = 100;
HANDLE hMutex;//定義互斥物件的控制代碼
//main函式是主執行緒的入口函式
void main()
{
//建立一個匿名的互斥物件
//FALSE值表示當前沒有執行緒擁有這個互斥物件,因此該互斥物件為有訊號狀態
hMutex = CreateMutex(NULL, FALSE, NULL);
//在主執行緒中建立新執行緒
HANDLE hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
//呼叫CloseHandle並沒有中止新建立的執行緒,在主執行緒中對新建立的執行緒不感興趣,因此將它關閉
CloseHandle(hThread1);
CloseHandle(hThread2);
Sleep(4000);//為了讓主程式不退出,睡眠4秒,不佔CPU時間
system("pause");
}
//執行緒1的入口函式
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE){
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){
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0){
Sleep(1);
cout << "thread2 sell ticket: " << tickets-- << endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}