boost 条件变量
2024-10-07 20:34:56
// boost 条件变量
// 做个简单的笔记 #include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp> boost::mutex m_mutex;
boost::condition_variable_any m_cond_var; // 加锁
do
{
boost::mutex::scoped_lock Lock(m_mutex);
// other doing
}
while (false);
// 唤醒沉睡的线程
m_cond_var.notify_all(); // 进入条件变量沉睡,直到通知的到来。
// 调用wait 之前必须加锁成功
// 因为在wait() 中会首先释放锁。
// 同时,当wait() 函数返回后,该函数会将锁拿到,
// 所以wait() 函数返回后,是持有该锁的状态返回的。
m_mutex.lock();
m_cond_var.wait(m_mutex);
m_mutex.unlock(); // 定时休眠
{
boost::mutex::scoped_lock lk(m_mutex);
if (m_cond_var.timed_wait(
lk, get_system_time() + posix_time::seconds()))
{
线程被 notify 唤醒
}
else
{
超时
}
} // 消费者线程使用条件变量
void Consumer()
{
while (true)
{
{
boost::mutex::scoped_lock lk(m_mutex);
// 每次进入条件变量休眠之前都要判断是否满足条件进入条件变量。
// 这一步很容易忘记
while (满足进入条件变量的条件)
m_cond_var.wait(lk);
// 从集合中提取需要的数据
// 块结束,lk 会自动释放锁
} ... // 处理从集合中得到的数据
}
}
最新文章
- font-weight -- 定义字体的粗细
- Android 组件属性
- 配置jdk
- “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常[WCF]
- 事件冒泡与事件委托 -Tom
- 用原生javascript做的一个打地鼠的小游戏
- global, $GLOBALS[]
- linux驱动面试题目汇总
- 程序猿的道路~~(How to be a programmer?)
- Qt 向word中插入文字(使用QAxWidget和QAxObject)
- Java中File的使用
- (一)surging 微服务框架使用系列之surging 的准备工作rabbitmq安装
- 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】
- set操作
- anaconda 的安装
- web端代码提示
- ASP.NET MVC利用PagedList分页(一)
- mui 打开外网链接返回的正姿势!
- [Java学习]面向对象-类的继承;方法覆盖
- Beta阶段展示博客