#include <iostream>
#include <windows.h>
#include <stdlib.h>
using namespace std;
HANDLE g_hMutex = NULL;
const int g_Number = 3;
DWORD WINAPI ThreadProc1(__in LPVOID lpParameter);
DWORD WINAPI ThreadProc2(__in LPVOID lpParameter);
DWORD WINAPI ThreadProc3(__in LPVOID lpParameter);
int main()
{
// 建立互斥器
g_hMutex = CreateMutex(NULL, FALSE, NULL); // FALSE代表目前沒有線程擁有這個互斥對象
HANDLE hThread[g_Number] = { 0 };
int first = 1;
int second = 2;
int third = 3;
// 建立工作線程
hThread[0] = CreateThread(NULL, 0, ThreadProc1, (LPVOID)first, 0, NULL);
hThread[1] = CreateThread(NULL, 0, ThreadProc2, (LPVOID)second, 0, NULL);
hThread[2] = CreateThread(NULL, 0, ThreadProc3, (LPVOID)third, 0, NULL);
// 線程handle引用計數減1
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
CloseHandle(hThread[2]);
// 主線程等待多個工作線程
WaitForMultipleObjects(g_Number, hThread, TRUE, INFINITE);
system("pause");
// 關閉互斥器(核心對象)
CloseHandle(g_hMutex);
return 0;
}
DWORD WINAPI ThreadProc1(__in LPVOID lpParameter)
{
WaitForSingleObject(g_hMutex, INFINITE); // 等待互斥量
cout << (int)lpParameter << endl;
ReleaseMutex(g_hMutex); // 釋放互斥量
return 0;
}
DWORD WINAPI ThreadProc2(__in LPVOID lpParameter)
{
WaitForSingleObject(g_hMutex, INFINITE);
cout << (int)lpParameter << endl;
ReleaseMutex(g_hMutex);
return 0;
}
DWORD WINAPI ThreadProc3(__in LPVOID lpParameter)
{
WaitForSingleObject(g_hMutex, INFINITE);
cout << (int)lpParameter << endl;
ReleaseMutex(g_hMutex);
return 0;
}