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