C++ 在两个线程之间共享截止期计时器
我需要在两个线程之间共享boost::deadline\u计时器。boost文档称“共享实例不是线程安全的”。下面是一个示例代码:C++ 在两个线程之间共享截止期计时器,c++,boost,timer,boost-thread,C++,Boost,Timer,Boost Thread,我需要在两个线程之间共享boost::deadline\u计时器。boost文档称“共享实例不是线程安全的”。下面是一个示例代码: ClassA : public enable_shared_from_this<ClassA>{ ClassA() { m_timer = new boost::deadline_timer(m_io_service); } destroy() { m_timer->cancel(); delete
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);
}
}
它是线程安全的吗
谢谢。不,那没用
原子仅使指针的存储/加载不可分割。当您取消引用它时,您只是直接访问未同步的截止时间计时器
所以你可以
- 仅围绕对截止时间计时器的所有访问进行传统的线程同步(例如,使用
互斥锁
)
- 使用Asio
串
创建执行的“逻辑”线程,并注意仅从该串访问死线计时器
strand方法可能更有效,但要求您更准确地考虑执行流程,以免意外创建数据竞争您是否尝试编译自己的代码以查看是否存在任何问题?@inetknght为什么需要知道?他并不是真的在编译器错误或诸如此类的问题上寻求帮助。我认为那里有足够的信息(如果不是太多的话)。代码可以编译,但有时我会崩溃,因为线程试图访问m_timer,而另一个线程删除了m_timer。所以我想我需要在destroy()和thread_method()中使用互斥体,不是吗?我会使用互斥体,这样更简单。谢谢
boost::atomic<boost::deadline_timer*> m_timer;
m_timer = new boost::deadline_timer(m_io_service);