首页 > 编程语言 > 详细

有三个线程,ID 分别为 A,B,C 要求三个线程按顺序循环打印若干次

时间:2015-11-19 20:42:38      阅读:301      评论:0      收藏:0      [点我收藏+]
std::mutex m;
std::condition_variable cond;
int flag = 0;
constexpr int kLoopTimes = 10;
void Foo(int id){
    // 尽可能限制临界区的范围,让临时对象及时析构。
    {
        std::unique_lock<std::mutex> lock(m);
        // 只有匹配 ID 的线程方可运行,其他只能等待。
        while (flag != id){
            // wait 解锁所持锁并阻塞,直到被 notified。
            cond.wait (lock);
        }
    }
    // 根据 ID 输出相应的字符。
    for (int i = 0; i != kLoopTimes; ++i){
        std::printf("%c", static_cast<char>(A + flag));
        flag = ((flag + 1) % 3);
    }
    cond.notify_all ();
}

 

有三个线程,ID 分别为 A,B,C 要求三个线程按顺序循环打印若干次

原文:http://www.cnblogs.com/wuOverflow/p/4978865.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!