概述
互斥量的使用。获得互斥量,通过OpenMutex获得。
创建一个互斥量:CreateMutex(属性指针,是否初始化拥有者, 名称)。
打开并申请占有一个互斥量:OpenMutex(MUTEX_ALL_ACCESS, FALSE$, "Mutex.Test");
释放互斥量:ReleaseMutex(HANDLE);
//使用互斥量同步的例子
//三个子线程互斥的执行
#include <iostream>
#include <Windows.h>
#define THREAD_INSTANCE_NUMBER
3
using namespace std;
DWORD ThreadProc(void* pData){
int threadNumberTemp = *(int*)pData;
HANDLE hmutex;
cout << "ThreadProc: " << threadNumberTemp << " is running." << endl;
if ((hmutex = OpenMutex(MUTEX_ALL_ACCESS, false, (LPCWSTR)"Mutex.Test")) == NULL){
cout << "open mutex error." << endl;
return 0;
}
cout << "ThreadProc: " << threadNumberTemp << " gets the mutex." << endl;
ReleaseMutex(hmutex);
CloseHandle(hmutex);
return 0;
}
int main()
{
DWORD ID[THREAD_INSTANCE_NUMBER];
HANDLE h[THREAD_INSTANCE_NUMBER];
HANDLE hmutex;
if ((hmutex = OpenMutex(MUTEX_ALL_ACCESS, false, (LPCWSTR)"Mutex.Test")) == NULL){
if ((hmutex = CreateMutex(NULL, false, (LPCWSTR)"Mutex.Test")) == NULL){
cout << "create mutex error." << endl;
return 0;
}
}
for (int i = 0; i < THREAD_INSTANCE_NUMBER; i++){
h[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (void*)&ID[i], 0, &ID[i]);
if (h[i] == NULL){
cout << "create thread error." << endl;
}
else{
cout << "create thread: " << ID[i] << endl;
}
}
WaitForMultipleObjects(THREAD_INSTANCE_NUMBER, h, true, INFINITE);
CloseHandle(hmutex);
return 0;
}
最后
以上就是飞快西装为你收集整理的互斥量的使用方法的全部内容,希望文章能够帮你解决互斥量的使用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复