[modern c++] c++ 11 实现 Windows 下的信号量

本文介绍了在C++11中如何利用条件变量来模拟信号量的功能,提供了一个`CSemaphore`类的实现,包含`semaphoreP`和`semaphoreV`方法,分别对应信号量的等待和释放操作,适用于多线程同步控制。
摘要由CSDN通过智能技术生成

Windows 下 有 CreateSemaphore 来创建信号量,c++ 11 没有实现信号量,可以用条件变量来模拟信号量:

    class CSemaphore
    {

    public:
        CSemaphore();
        ~CSemaphore();

        void semaphoreP(unsigned int timeout = 0)
        {
            std::unique_lock<std::mutex> l(m_lock);
            while(m_cnt <= 0){
            std::cv_status ret = m_cv.wait_for(l,std::chrono::microseconds(timeout));
            if(ret==std::cv_status::no_timeout){
            }else{
                return SEMAPHORE_P_RESULT::P_TIMEOUT;
            }
            m_cnt--;
        }

        bool semaphoreV()
        {
            std::unique_lock<std::mutex> l(m_lock);
            m_cnt++;
            m_cv.notify_one();
        }


    private:
        std::mutex m_lock;
        std::condition_variable m_cv;
        int m_cnt;
    };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值