C++多线程 互斥锁 信号量 事件 临界区

一、互斥锁

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)
{
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值