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,一定要是指针或者引用类型的。
该函数会解锁互斥量,并关注条件变量。
同时被唤醒的时候会加锁互斥量。然后继续运行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容