互斥量Mutex

C++使用内核对象Mutex来实现线程同步锁。当两个或者更多线程需要同时访问一个共享资源时,Mutex可以只向一个线程授予对共享资源的独占访问权,如果第一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,知道第一个线程释放该互斥体

 

相关API函数:

 

创建互斥量

CreateMutex();

HANDLE CreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的指针,一般为NULL
BOOLbInitialOwner, // 初始化互斥对象的所有者,TRUE表示调用互斥对象的线程获得互斥对象的所有权,为FALSE表示不拥有
LPCTSTRlpName // 指向互斥对象名的指针,传NULL表示匿名互斥量
);

函数成功返回句柄,如果创建已有互斥量,那么返回已经存在的信号量句柄,GetLastError也会设置为ERROR_ALREADY_EXISTS,失败返回NULL

 

ReleaseMutex()  释放线程拥有的互斥体的控制权。

BOOL WINAPI ReleaseMutex(
HANDLE hMutex   //互斥体句柄
);

 

利用mutex也可以实现进程只有一个实例

方法:

进程第一次启动时成功创建名为mutex实例成功,此后进程实例第二次创建时,GetLastError()会返回ERROR_ALREADY_EXISTS,从而保证进程在系统中只能存在一个实例。

posted @ 2020-04-18 16:29  坦坦荡荡  阅读(115)  评论(0编辑  收藏  举报