美文网首页
5. Condition.h——条件变量

5. Condition.h——条件变量

作者: Myth52125 | 来源:发表于2017-08-15 12:42 被阅读0次

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——条件变量

    u>该类封装了条件变量和他的相关函数 Condition类封装了condition。在构造的时候应该传入于创建的条...

  • JavaScript基础笔记

    摘要:1.语句2.变量2.1变量提升3.标识符4.注释5.区块6.条件语句6.1 if 结构6.2 if…else...

  • 5.变量

    变量(Variable) 是编程语言里的基本概念。 三要素:名字,值,类型可以变化的量 命名 一个变量需要有一个合...

  • 条件变量

    条件变量: 条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。为什么有...

  • 条件变量

    条件遍历是一种同步机制,它阻塞线程直到满足某个条件,避免忙等待。C++11提供了两种条件变量,需要添加头文件#in...

  • 条件变量

    多线程中代替轮询 考虑一种情形:有一个容器,里面时任务,只要容器不为空,那么就有很多个线程去处理里面的任务。同时有...

  • 条件变量

    头文件:#include 与互斥锁不同,条件变量是用来等待而不是用来上锁的,条件变量本身不是锁!条件变量用来自动阻...

  • pthread_cond_t条件变量

    Linux下C编程的条件变量: 条件变量是线程中的东西,就是等待某一条件的发生,和信号一样。 用法 条件变量使我们...

  • JS 变量 条件

    变量 声明变量同时赋值 var name='亚索';var number=20; 先声明变量再赋值 var nam...

  • Go条件变量

    条件变量:本身不是锁,但是经常和锁结合使用。对应有3个常用方法。wait,signal,broadcast1、fu...

网友评论

      本文标题:5. Condition.h——条件变量

      本文链接:https://www.haomeiwen.com/subject/saqurxtx.html