C++ 条件变量condition_variable的例子
C++标准库对条件变量有两套实现:std::condition_variable
和 std::condition_variable_any
。 这两个实现都包含在 <condition_variable>
头文件的声明中。 两者都需要与一个互斥量一起才能工作(互斥量是为了同步); 前者仅限于与 std::mutex 一起工作, 而后者可以和任何满足最低标准的互斥量一起工作, 从而加上了_any的后缀。
直接上代码:
#include <memory> #include <thread> #include <chrono> #include <mutex> #include <condition_variable> class conditionTest { public: conditionTest() { m_th = std::thread(std::bind(&conditionTest::MyThreadLoop, this)); m_th2 = std::thread(std::bind(&conditionTest::MyThreadLoop2222, this)); } ~conditionTest() { } void MyThreadLoop() { while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); std::unique_lock<std::mutex> locker(_mutex); mmmm++; printf("MyThreadLoop AAAAAAAAAAAAAAAAAA mmmm:%d \n", mmmm); conTTT.notify_one(); } } void MyThreadLoop2222() { while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); std::unique_lock<std::mutex> locker(_mutex); conTTT.wait(locker); // 这里会先解锁(允许别人加锁),再进入等待状态。 printf("MyThreadLoop2222 BBBBBBBBBBBBBBBBBB mmmm:%d \n", mmmm); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } std::thread m_th; std::thread m_th2; std::mutex _mutex; std::condition_variable_any conTTT; int mmmm = 0; }; int main() { conditionTest tt; system("pause"); return 0; }