1. 程式人生 > >簡單多執行緒示例

簡單多執行緒示例

#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; }