代码与《秒杀多线程第三篇 原子操作 Interlocked系列函数》上的一样,下面,我们用互斥器来解决:
#include "stdio.h"
#include "windows.h"
long LoginCount;
HANDLE handle[50];
HANDLE hMutex;
DWORD WINAPI ThreadFunc(void *pm)
{
Sleep(300);
WaitForSingleObject(hMutex,INFINITE);
LoginCount++;
ReleaseMutex(hMutex);
return 0;
}
int main()
{
int num=20;
while(num--)
{
LoginCount=0;
hMutex=CreateMutex(NULL,FALSE,NULL);
for(int i=0; i<50; i++)
{
handle[i]=CreateThread(NULL,0,ThreadFunc,NULL,0,NULL);
}
WaitForMultipleObjects(50,handle,TRUE,INFINITE);
printf("有%d个用户登录,记录结果是%d\n",50,LoginCount);
}
system("pause");
return 0;
}