Windows同步API—— Mutex

互斥


互斥量的作用是保证每次只能有一个线程获得互斥量而得以继续执行,使用CreateMutex 函数创建:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
// 安全属性结构指针,可为NULL
BOOL bInitialOwner,
//是否占有该互斥量,TRUE:占有,FALSE:不占有
LPCTSTR lpName
//信号量的名称
);


Mutex 是核心对象,可以跨进程访问,下面的代码给出了从另一进程访问命名Mutex 的例子:
HANDLE hMutex;
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"mutexName");
if (hMutex){
…
}
else{
…
}


相关API:
BOOL WINAPI ReleaseMutex(
HANDLE hMutex
);


使用互斥编程的一般方法是:
void UpdateResource()
{
WaitForSingleObject(hMutex,…);
...//do something
ReleaseMutex(hMutex);
}


互斥(mutex)内核对象能够确保线程拥有对单个资源的互斥访问权。互斥对象的行为特性与临界区相
同,但是互斥对象属于内核对象,而临界区则属于用户方式对象,因此这导致mutex 与Critical Section 的
如下不同:
(1) 互斥对象的运行速度比关键代码段要慢;
(2) 不同进程中的多个线程能够访问单个互斥对象;
(3) 线程在等待访问资源时可以设定一个超时值。

你可能感兴趣的:(Windows同步API—— Mutex)