前言
曾经在《Modern C++ 条件变量》提到过可以用GDB来模拟线程调度来解释为什么打印“this is fun2,count=6” 而不是“this is fun2,count=5”。
通过本节也可以肉眼可见:
- 条件变量没有了另外一个flag变量的帮助是多么的文弱无力
- 条件变量是无状态的:如果在wait之前notify是没有任何效果的,即不会激活后来wait的线程。
回顾C++程序
#include <iostream>
#include <thread>
#include <condition_variable>
#include <mutex>
#include <unistd.h>
using namespace std;
//全局条件变量
condition_variable cond;
mutex _mutex;
int count = 0;
void fun1(){
while(1)
{
count++;
unique_lock<mutex>lock(_mutex);
if(count%5 == 0)
{
cond.notify_one();
}
else
{
cout<<"this is fun1,count="<<count<<endl;
}
lock.unlock();
}