windows C++多线程同步<3>-互斥量

windows C++多线程同步<3>-互斥量

概念,如下图:
windows C++多线程同步<3>-互斥量_第1张图片另外就是互斥对象谁拥有,谁释放

那么一个线程允许多次获取互斥对象吗?
答案是允许,但是申请多次就要释放多次,否则其他线程获取不到互斥对象;同一个线程可以多次获取,即使不释放也可以,但是这种做法有问题极易导致线程同步出现异常,强烈不建议使用;
互斥对象和事件对象两者都是内核对象,使用方法也几乎相同;

常用API

WaitForSingleObject(g_cs , INFINITE);
获取互斥对象

ReleaseMutex(g_cs);
释放互斥对象

#include
#include
using namespace std;

HANDLE g_cs;
int ticks =100;
DWORD WINAPI Func1(LPVOID lpParameter)
{
	while(true)
	{
		WaitForSingleObject(g_cs , INFINITE);
		if(ticks>0)
		{
			cout<<"thread1 "<<ticks<<endl;
			ticks--;
			ReleaseMutex(g_cs);
		}
		else
		{
			ReleaseMutex(g_cs);
			break;
		}
	}

	return 0;
}
DWORD WINAPI Func2(LPVOID lpParameter)
{
	while(true)
	{
		WaitForSingleObject(g_cs , INFINITE);

		if(ticks>0)
		{
			cout<<"thread2 "<<ticks<<endl;
			ticks--;
			ReleaseMutex(g_cs);
		}
		else
		{
			ReleaseMutex(g_cs);
			break;
		}
	}
	return 0;
}

int main()
{
	g_cs = CreateMutex(NULL,FALSE , NULL);
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1 = CreateThread(NULL , 0 ,Func1,NULL,0,NULL);
	hThread1 = CreateThread(NULL , 0 ,Func2,NULL,0,NULL);
	Sleep(2000);
	return 0;
}




你可能感兴趣的:(【MFC】,【Windows核心编程】,【道阻且长C++】,c++,开发语言)