版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youshijian99/article/details/80436383
创建一个有名和匿名的互斥锁
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // pointer to security attributes
BOOL bInitialOwner, // flag for initial ownership
LPCTSTR lpName // pointer to mutex-object name
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // pointer to security attributes
BOOL bInitialOwner, // flag for initial ownership
LPCTSTR lpName // pointer to mutex-object name
);
lpMutexAttributes // 是否被子进程继承,NULL不能被继承
bInitialOwner // TRUE, 调用线程拥有这个互斥量,FALSE 调用线程不拥有这个互斥量
lpName // 互斥量名称,NULL为匿名
返回值:
成功:互斥量句柄
失败:GetLastError function returns ERROR_ALREADY_EXISTS;或 NULL。
释放互斥量
BOOL ReleaseMutex(
HANDLE hMutex // handle to mutex object
);
返回值:
成功:返回非0
失败:返回0
获取互斥量
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object to wait for
DWORD dwMilliseconds // time-out interval in milliseconds。 INFINITE 无限等待
);
例程
#include <Windows.h>
#include <cstdio>
int g_var = 0;
static HANDLE hMutex = INVALID_HANDLE_VALUE;
#define GET_MUTEX() do{WaitForSingleObject(hMutex, INFINITE);}while(0==1)
#define RELASE_MUTEX() do{ReleaseMutex(hMutex);}while(0==1)
int main(int argc, char **argv)
{
hMutex = CreateMutex(NULL, FALSE, NULL);
GET_MUTEX();
g_var = 1;
RELASE_MUTEX();
getchar();
return 0;
}