Linux c++ 试验-1 条件变量(condition_variable)

1、示例

#include <iostream> // std::cout

#include <thread> // std::thread

#include <mutex> // std::mutex, std::unique_lock

#include <condition_variable> // std::condition_variable

std::mutex mtx; // 全局互斥锁.

std::condition_variable cv; // 全局条件变量.

bool ready = false; // 全局标志位.

void do_print_id(int id)

{

    std::unique_lock<std::mutex> lck(mtx);

    while (!ready) // 如果标志位不为 true, 则等待...

        cv.wait(lck); // 当前线程被阻塞, 当全局标志位变为 true 之后,

    // 线程被唤醒, 继续往下执行打印线程编号id.

    std::cout << "thread " << id << '\n';
}

void go()

{

    std::unique_lock<std::mutex> lck(mtx);

    ready = true; // 设置全局标志位为 true.

    cv.notify_all(); // 唤醒所有线程.
}

int main()

{

    std::thread threads[10];

    // spawn 10 threads:

    for (int i = 0; i < 10; ++i)

        threads[i] = std::thread(do_print_id, i);

    std::cout << "10 threads ready to race...\n";

    go(); // go!

    for (auto &th : threads)

        th.join();

    return 0;
}

2、编译
g++ ./testcondition_variable.cpp -lpthread
3、运行结果
10 threads ready to race...
thread 7
thread 3
thread 2
thread 4
thread 1
thread 0
thread 5
thread 6
thread 9
thread 8

posted @ 2021-10-01 22:15  zhaogaojian  阅读(208)  评论(0编辑  收藏  举报