互斥量与信号量实现方法类似:
互斥量:
HANDLE hMutex = NULL;//在全局中定义一个句柄
hMutex = CreateMutex(NULL,FALSE,NULL); //建立互斥量
if (WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0)//判断现在是否可占有互斥对象,INFINITE表示等待时间
ReleaseMutex(hMutex);//使用后释放互斥量
WaitForSingleObject,ReleaseMutex,就是在两个线程中存在资源占用冲突时使用。
信号量:
HANDLE h_ThreadSem = NULL;
h_ThreadSem = CreateSemaphore(NULL,0,1,NULL);//第二个参数表示初始信号量数量,第三个参数表示信号量数量最大值
if (WaitForSingleObject(h_ThreadSem, INFINITE) == WAIT_OBJECT_0)
ReleaseSemaphore(h_ThreadSem,1,NULL);//信号量数量加一
互斥量与信号量的区别:
互斥量是保护资源在同一时刻只有一个访问者能够访问,但不考虑顺序性。
信号量会控制访问者的先后顺序,相当于信号量在完成互斥量功能的前提下,可以有序甚至多个同时访问。
互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。