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

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;
    };

Guess you like

Origin blog.csdn.net/ykun089/article/details/120767119