windows C++多线程同步<3>-互斥量
概念,如下图:
另外就是互斥对象谁拥有,谁释放
那么一个线程允许多次获取互斥对象吗?
答案是允许,但是申请多次就要释放多次,否则其他线程获取不到互斥对象;同一个线程可以多次获取,即使不释放也可以,但是这种做法有问题极易导致线程同步出现异常,强烈不建议使用;
互斥对象和事件对象两者都是内核对象,使用方法也几乎相同;
常用API
WaitForSingleObject(g_cs , INFINITE);
获取互斥对象
ReleaseMutex(g_cs);
释放互斥对象
#include<iostream>
#include<Windows.h>
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;
}