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