对于一个Mutex,在没有进程/线程抢占的时候,一直处于signaled状态。一旦有一个进程/线程抢到控制权,状态就变成nonsignaled。因此,同一时刻,只能有一个进程/线程抢到控制权。
// 创建互斥锁
HANDLE CreateMutexA(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
// True :创建MutexObject的线程,立刻拥有Mutex的控制权。
// False:必须使用等待函数waitForSigleObject。
BOOL bInitialOwner,
LPCSTR lpName // 指定互斥体对象的名字,可以用vbNullString创建一个未命名的互斥体对象。
);
// 释放控制权
BOOL ReleaseMutex(
HANDLE hMutex
);
// 一般用于跨进程获取已经创建的Mutex对象
HANDLE OpenMutexW(
// 访问的方式:
// SYNCHRONIZE 允许互斥体对象同步使用
// MUTEX_ALL_ACCESS 请求对互斥体的完全访问
DWORD dwDesiredAccess,
BOOL bInheritHandle, // true,子进程能够继承句柄
LPCWSTR lpName // 指定互斥体对象的名字
);
Demo:
svn://gitee.com/sudaidai/Knowledge_List_of_C
文件夹路径:WindowsAPI/Mutex