#include <stdio.h>
#include <Windows.h>
using namespace std;
//定义一个共享变量
int ticketAmount = 2;
//定义一个互斥量
CRITICAL_SECTION lock;
//线程函数
DWORD WINAPI ticketAgent(void* arg) {
//acquire lock
EnterCriticalSection(&lock);
int t = ticketAmount;
if (t > 0) {
printf("One ticket sold!\n");
t--;
}
else
{
printf("Ticket sold out!\n");
}
ticketAmount = t;
//release lock
LeaveCriticalSection(&lock);
return(0);
}
int main(int argc, char const* argv[]) {
//初始化互斥量
InitializeCriticalSection(&lock);
//创建两个线程
HANDLE ticketAgent_tid[2];
for(int i = 0; i < 2; i++) {
ticketAgent_tid[i] = CreateThread(NULL, 0, ticketAgent, NULL, 0, NULL);
}
//等待两个线程结束
for(int i = 0; i < 2; i++) {
WaitForSingleObject(ticketAgent_tid[i], INFINITE);
}
//释放线程句柄
for (int i = 0; i < 2; i++) {
CloseHandle(ticketAgent_tid[i]);
}
printf("ticketAmount:%d", ticketAmount);
// 销毁互斥量
DeleteCriticalSection(&lock);
getchar();
return 0;
}
windows 多线程互斥锁
于 2023-05-26 10:55:26 首次发布