muduo库阅读(4)——基本类型之条件变量
来源:互联网 发布:2017人工智能高峰论坛 编辑:程序博客网 时间:2024/06/15 10:34
namespace muduo{/* * 条件变量 */class Condition : boost::noncopyable{public:explicit Condition(MutexLock& mutex): mutex_(mutex){// 初始化MCHECK(pthread_cond_init(&pcond_, NULL));}~Condition(){// 释放MCHECK(pthread_cond_destroy(&pcond_));}/* * 等待被唤醒 */void wait(){// 先解除锁的持有MutexLock::UnassignGuard ug(mutex_);//然后等待MCHECK(pthread_cond_wait(&pcond_, mutex_.getPthreadMutex()));//等待成功之后,返回的时候,当前线程又会重新持有锁}// returns true if time out, false otherwise.// 带超时的等待bool waitForSeconds(int seconds);// 唤醒一个等待的线程/* * pthread_cond_signal在多处理器上可能同时唤醒多个线程, * 当你只能让一个线程处理某个任务时,其它被唤醒的线程就需要继续 wait, * while循环的意义就体现在这里了, * 而且规范要求pthread_cond_signal至少唤醒一个pthread_cond_wait上 的线程, * 其实有些实现为了简单在单处理器上也会唤醒多个线程 */void notify(){MCHECK(pthread_cond_signal(&pcond_));}/* * 唤醒所有等待的线程 */void notifyAll(){MCHECK(pthread_cond_broadcast(&pcond_));}private:MutexLock& mutex_;// 条件变量的锁pthread_cond_t pcond_;// 条件变量};}
// returns true if time out, false otherwise.// 带超时的等待bool muduo::Condition::waitForSeconds(int seconds){struct timespec abstime;// FIXME: use CLOCK_MONOTONIC or CLOCK_MONOTONIC_RAW to prevent time rewind.clock_gettime(CLOCK_REALTIME, &abstime);abstime.tv_sec += seconds;// 解除锁的持有MutexLock::UnassignGuard ug(mutex_);//等待return ETIMEDOUT == pthread_cond_timedwait(&pcond_, mutex_.getPthreadMutex(), &abstime);// 函数返回的时候,当前线程又会重新持有锁}
0 0
- muduo库阅读(4)——基本类型之条件变量
- muduo库阅读(1)——基本类型之AtomicIntegerT
- muduo库阅读(2)——基本类型之互斥锁
- muduo库阅读(3)——基本类型之阻塞队列
- muduo网络库学习笔记(4):互斥量和条件变量
- Muduo库源码分析(5):互斥锁,条件变量类
- muduo网络库源码学习————条件变量
- muduo库阅读(5)——线程
- muduo库阅读(6)——当前线程
- muduo库阅读(7)——线程本地存储
- muduo库阅读(9)——线程池
- muduo库阅读(10)——进程信息
- muduo库阅读(11)——文件工具类
- muduo库阅读(12)——异常类
- muduo库阅读(14)——倒数计数器
- muduo库阅读(16)——异步日志类
- muduo库阅读(17)——日志文件类
- muduo库阅读(18)——日志记录器
- 华为、阿里、京东使用的Java web框架是啥样的?
- MySQL数据表死锁解决办法
- iOS开发-OC中的实例变量
- UIWindow
- Spring中的报错:no matching editors or conversion strategy found
- muduo库阅读(4)——基本类型之条件变量
- hdoj1528【贪心】
- vc++兼容不了win7的解决办法+c语言输入字符串的一些问题
- iOS开发-继承
- Android 的进程, 线程和任务
- 112 web dns理论
- zoj1610Count the Colors【暴力 or 线段树】
- 最短路径算法1—多源点Floyd
- iOS开发-基本数据类型,对象