一、互斥锁
1、先熟悉熟悉API
1,创建互斥锁,并反正一个句柄
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的指针
BOOLbInitialOwner, // 初始化互斥对象的所有者,一般设置为FALSE
LPCTSTRlpName // 互斥对象名
);
2,释放互斥对象的控制权
BOOL ReleaseMutex(
HANDLE hMutex //已创建Mutex的句柄
);
3,打开互斥锁,返回句柄
HANDLE OpenMutex(
DWORDdwDesiredAccess, // 互斥体的访问权限
BOOLbInheritHandle, //如希望子进程能够继承句柄,则为TRUE
LPCTSTRlpName // 互斥锁名字
);
4,等待目标返回
DWORD WaitForSingleObject(
HANDLE hHandle, //目标句柄
DWORD dwMilliseconds //等待时间 ,毫秒记,INFINITE为永久等待
);
一个简单的互斥锁例子来实现多线程同步
#include<Windows.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
static int g_count = 100;
class Lock
{
public:
Lock(char*szName)
{
hd = OpenMutex(MUTEX_ALL_ACCESS, NULL, (LPCWSTR)szName);
WaitForSingleObject(hd, INFINITE);
Sleep(1500);//测试用:等待1.5秒,正式类中不应有
}
~Lock()
{
ReleaseMutex(hd);
}
static bool InitLock(char*szName)
{
if (!OpenMutex(MUTEX_ALL_ACCESS, NULL, (LPCWSTR)szName))
{
if (!CreateMutex(NULL, NULL, (LPCWSTR)szName))
return false;
return true;
}
return false;
}
HANDLE hd;
};
UINT address1(LPVOID lparam)
{