[c++11]条件变量测试

#include <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <vector>
#include <chrono>

std::mutex global_mutex;
std::condition_variable global_cv;
bool is_avaliable = false;

void cv_thread()
{
    int cnt = 0;
    std::unique_lock<std::mutex> lock(global_mutex);
    std::cout << "cv_thread, before loop, is locked = " << lock.owns_lock() << std::endl;
    while (is_avaliable == false)
    {
        global_cv.wait(lock);
        std::cout << "cv_thread, in loop, is locked = " << lock.owns_lock();
        std::cout << " cnt = " << cnt << std::endl;
        ++cnt;
        if (cnt == 10)
        {
            break;
        }
    }
}

void cv_nodify()
{
    std::unique_lock<std::mutex> lock(global_mutex);
    global_cv.notify_all();
}

int main()
{
    std::thread cv_work(cv_thread);
    for (int i = 0; i < 10; ++i)
    {
        std::this_thread::sleep_for(std::chrono::seconds(1));
        std::cout << "send notify : " << i << std::endl;
        cv_nodify();
    }
    cv_work.join();
    return 0;
}

输出:

cv_thread, before loop, is locked = 1
send notify : 0
cv_thread, in loop, is locked = 1 cnt = 0
send notify : 1
cv_thread, in loop, is locked = 1 cnt = 1
send notify : 2
cv_thread, in loop, is locked = 1 cnt = 2
send notify : 3
cv_thread, in loop, is locked = 1 cnt = 3
send notify : 4
cv_thread, in loop, is locked = 1 cnt = 4
send notify : 5
cv_thread, in loop, is locked = 1 cnt = 5
send notify : 6
cv_thread, in loop, is locked = 1 cnt = 6
send notify : 7
cv_thread, in loop, is locked = 1 cnt = 7
send notify : 8
cv_thread, in loop, is locked = 1 cnt = 8
send notify : 9
cv_thread, in loop, is locked = 1 cnt = 9

猜你喜欢

转载自blog.csdn.net/adream307/article/details/82623171