当前位置:C++技术网 > 资讯 > C++线程中的两种方法解决线程并发问题

C++线程中的两种方法解决线程并发问题

更新时间:2016-03-01 21:42:07浏览次数:1+次

秒杀多线程第三篇 原子操作 Interlocked系列函数》一文里面,介绍了原子操作Interlocked系列函数的妙用。当我看这篇文章的时候,我就想能不能用互斥器来解决,结果还真行。首先,我们先看看问题:

代码与《秒杀多线程第三篇 原子操作 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;
}