一、定义
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);
第一个参数是一个指向SECURITY_ATTRIBUTES结构体的指针,一般的情况下,可以是nullptr。
第二个参数类型为BOOL,表示互斥锁创建出来后是否被当前线程持有。
第三个参数类型为字符串(const TCHAR*),是这个互斥锁的名字,如果是nullptr,则互斥锁是匿名的。
例: HANDLE hMutex = CreateMutex(nullptr, FALSE, nullptr);上面的代码创建了一个匿名的互斥锁,创建出来后,当前线程不持有这个互斥锁。
二、实例
#include <windows.h>
class CLock
{
public:
CLock() :_mutex(NULL)
{
this->_mutex = CreateMutex(NULL, FALSE, TEXT("_temp_mutex_lock"));
}
virtual ~CLock()
{
if (this->_mutex)
{
CloseHandle(this->_mutex);
this->_mutex = NULL;
}
}
CLock(const CLock& mutex) { *this = mutex; }
CLock& operator=(const CLock& other)
{
if (this != &other)
{
this->_mutex = other._mutex;
}
return *this;
}
private:
HANDLE _mutex;
public:
void Lock()
{
WaitForSingleObject(this->_mutex, INFINITE);
}
void UnLock()
{
ReleaseMutex(this->_mutex);
}
};
参考:
https://blog.csdn.net/enterlly/article/details/79158920
https://blog.csdn.net/xialianggang1314/article/details/78477451