windows条件变量

来源:互联网 发布:linux 手动开启服务 编辑:程序博客网 时间:2024/06/05 04:29

在我的印象中,一直以为windows的多线程同步机制,也就是同步对象只有四个,临界区,互斥,事件,信号量。而linux的同步对象也是四个,互斥,条件变量,读写锁,信号量。打开windows的同步对象头文件synchapi.h才发现,windows其实也有条件变量和读写锁。而这里我要重点说的是条件变量。在我之前的文章《Linux互斥锁和条件变量》说过了linux下通过互斥锁和条件变量实现生产者消费者模式下互相制约,又互相触发启动的例子。本来以为windows下做不到,毕竟事件没有条件变量的解锁,休眠,等待通知这样的原子操作。现在发现了新大陆,那么也可以在windows下实现了。

class thread_lock{public:    thread_lock()    {        InitializeCriticalSection(&m_section);        InitializeConditionVariable(&m_conditon);    }    ~thread_lock()    {        DeleteCriticalSection(&m_section);    }    void lock()    {        EnterCriticalSection(&m_section);    }    void unlock()    {        LeaveCriticalSection(&m_section);    }    void wait()    {        SleepConditionVariableCS(&m_conditon, &m_section, INFINITE);    }    void signal()    {        WakeConditionVariable(&m_conditon);    }private:    CRITICAL_SECTION m_section;    CONDITION_VARIABLE m_conditon;};
0 0