1、最簡單的多線程任務及利用Mutex實現線程互斥,運行效果如下:
2、代碼如下:
// MultiThread.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。
//
#include <windows.h>
#include <stdio.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
unsigned int nTickets = 50;
HANDLE hMutex; // 線程互斥
int main()
{
HANDLE hThreadl;
HANDLE hThread2;
hMutex = CreateMutex(NULL, FALSE, NULL);
hThreadl = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
CloseHandle(hThreadl);
CloseHandle(hThread2);
Sleep(500); //延遲主線程結束時間,等待子線程執行完成100次
printf("Tickets are sold out:%d!", nTickets);
return 0;
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hMutex, INFINITE);
if (nTickets < 1)
{
break;
}
printf("LM sells ticket:%d! \n", nTickets--);
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hMutex, INFINITE);
if (nTickets < 1)
{
break;
}
printf("JK sells ticket:%d! \n", nTickets--);
ReleaseMutex(hMutex);
}
return 0;
}