#include <Windows.h>
#include <stdio.h>
/**
* 互斥对象属于内核对象,能够确保线程拥有对单个资源的互斥访问权
* 互斥对象包含一个使用数量、一个线程ID、一个计数器
* ID用于标识系统中哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数
*/
/* 启用两个线程模拟售票窗口,销售100张票 */
DWORD WINAPI MyProc1(LPVOID lp);
DWORD WINAPI MyProc2(LPVOID lp);
int tickets = 100;
HANDLE hMutex;
void main()
{
HANDLE handle1;
HANDLE handle2;
handle1 = (HANDLE)CreateThread(NULL, 0, MyProc1, NULL, 0, NULL); // 注意线程启动也需要时间
handle2 = (HANDLE)CreateThread(NULL, 0, MyProc2, NULL, 0, NULL); // 注意线程启动也需要时间
CloseHandle(handle1);
CloseHandle(handle2);
hMutex = CreateMutex(NULL, FALSE, NULL);
Sleep(4000);
system("pause");
}
DWORD WINAPI MyProc1(LPVOID lp)
{
while (true)
{
WaitForSingleObject(hMutex, INFINITE);
if (tickets>0)
{
Sleep(1);
printf("thread1 sell ticket :%d\n", tickets);
tickets--;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI MyProc2(LPVOID lp)
{
while (true)
{
WaitForSingleObject(hMutex, INFINITE);
if (tickets>0)
{
Sleep(1);
printf("thread2 sell ticket :%d\n", tickets);
tickets--;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
互斥量的同步(Mutex)
最新推荐文章于 2024-08-13 10:53:08 发布