5. Condition.h——条件变量

u>该类封装了条件变量和他的相关函数

Condition类封装了condition。
在构造的时候应该传入于创建的条件变量对应的互斥量。

同时,应该封装,两个等待函数,两个唤醒函数,

class Condition
{
private:
  MutexLock &_mutex;
  pthread_cond_t _cond;
public:
  //构造函数和析构函数
  Condition(MutexLock *mutex):_mutex(mutex)
  {ptrhread_cond_init(&_cond,NULL);}
  ~Condition()
  {pthread_cond_destroy(&_cond);}
   
  //muduo的wait中,还有释放解锁互斥量然后再加的操作,但是,pthread_cond_wait()是一个原子操作,没必要吧?
  void wait()
  {pthread_cond_wait(&_cond,&_mutex);}

  //超时等待。涉及到转换为一个结构体。
  bool waitForSeconds(double seconds);

  //两个唤醒函数
  void notify()
  {pthread_cond_signal(&_cond));}
  void notifyAll()
  {pthread_cond_broadcast(&_cond_));}
}

这里要注意的点:
pthread_cond_wait()的第二个参数,一定要是当前线程持有的,而且已经加锁的互斥量。
如果不是,那么该函数会返回错误码22.
所以在封装的时候,MutexLock &_mutex,一定要是指针或者引用类型的。
该函数会解锁互斥量,并关注条件变量。
同时被唤醒的时候会加锁互斥量。然后继续运行。

你可能感兴趣的:(5. Condition.h——条件变量)