Boost:如何处理依赖于时间的线程操作
Boost: how deal time dependent thread operations?
例如,有一个数组或读线程和一个写线程,我们可以像这样通过shared_mutex和shared_lock来连接它们,如果我们不依赖于时间,这是有效的。但是如果我们想在一定的时间范围内完成所有的写操作,如果它们没有完成,停止等待,开始在读线程内做其他事情。怎么做呢?如何能够从某个观察者线程对所有的读者线程说——"嘿,伙计们——在这个时间框架内会有任何来自作者的新数据,所以继续吧。"
使用定时锁
boost::shared_mutex m
Reader()
shared_lock lock(m, timeout);
if(!lock) {
//I don't have the lock. Don't touch the resource and do something else.
}
else {
//I have the lock. Read now.
}
Writer()
upgrade_lock lck(m);
upgrade_to_unique_lock uniqueLock(lck);
选择一个超时值。注意,它不一定是精确的。
顺便说一句:如果你要使用Boost。线程,也许你应该阅读文档。这是相当广泛的。我从来没用过Boost。线程,我花了几秒钟找到这个
还有另一种解决问题的方法:查看线程池模式。使用此模式,您将工作划分为可由工作线程池执行的单元。只要有事情要做,就将一个工作单元排队,池中下一个可用的线程将执行它。这保证了线程总是在忙着做一些事情(当有事情要做的时候)。
你需要学习线程安全的生产者-消费者队列来实现这个模式。
相关文章:
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 为什么内存屏障依赖于变量?
- 反转依赖于 end() 的迭代器
- 编译依赖于 QTCore 库的 WASM
- 如何添加依赖于类本身的模板成员变量
- 初始化依赖于子类的继承类的常量类成员
- Makefile 创建两个库 - 一个依赖于另一个
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 类成员函数参数列表是否可以依赖于模板参数?
- 依赖于类成员属性的类实例成员
- 如何定义依赖于参数包转换的函数的返回类型
- 依赖于模板的错误
- 依赖于特定类类型的C++模板方法
- FBString 的小字符串优化是否依赖于未定义的行为?
- CMake:如何在Visual Studio环境中将依赖于模式的编译标志传递给nvcc
- C++ 使函数调用依赖于模板参数
- 如何初始化依赖于先前条目的可变参数模板?
- 测试一个方法的私有成员是否依赖于时钟时间
- Boost:如何处理依赖于时间的线程操作
- 如何制作自定义MSBuild目标's的执行依赖于文件's的时间戳