在两个线程之间共享deadline_timer
Share deadline_timer between two threads
我需要在两个线程之间共享一个boost::d eadline_timer。提升文档说"共享实例不是线程安全的"。下面是一个示例代码:
ClassA : public enable_shared_from_this<ClassA>{
ClassA()
{
m_timer = new boost::deadline_timer(m_io_service);
}
destroy()
{
m_timer->cancel();
delete m_timer;
m_timer = NULL;
}
thread_method()
{
m_timer->expire_from_now(...);
m_timer->async_wait(...);
}
run()
{
boost::thread t(ClassA::thread_method, shared_from_this);
}
}
我的问题是"要在 destroy() 和 thread_method() 之间同步计时器访问,我可以使用 boost::atomic 吗?
页眉:
boost::atomic<boost::deadline_timer*> m_timer;
构造 函数:
m_timer = new boost::deadline_timer(m_io_service);
它是线程安全的吗?
谢谢。
不,这无济于事。
原子仅使指针的存储/加载不可分割。当您取消引用它时,您只是直接访问deadline_timer
,不同步。
所以你可以
-
只是围绕对截止时间计时器的所有访问进行传统的线程同步(例如,使用
mutex
) -
使用 Asio
strand
创建执行的"逻辑"线程,并注意仅从该链访问死线计时器。
链方法可能更有效,但需要您更准确地考虑执行流程,这样您就不会意外地创建数据竞争。
相关文章:
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- C++两个源文件之间共享的枚举的静态实例
- 线程之间的实时数据共享
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- Directx 12 :在两个进程之间共享图形内存
- 子目录之间的 CMAKE 共享变量
- C++ 多个 DLL 之间的共享接口
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 简单使用 std::atomic 在两个线程之间共享数据
- C++:在另外两个对象之间共享一个对象
- 在C++中的程序之间共享指针
- 拥有或在对象之间共享资源
- 在两个结构之间共享数组
- 如何在不同的CMakeList.txt之间共享变量?
- 在QT中的两个窗口之间共享websocket连接
- 在VS2017中,我们如何在项目成员之间共享编译设置
- 通过require在不同的Lua状态之间共享全局变量