【发布时间】:2015-01-23 21:10:44
【问题描述】:
我需要在两个线程之间共享一个 boost::deadline_timer。 boost 文档说“共享实例不是线程安全的”。这是一个示例代码:
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);
它是线程安全的吗?
谢谢。
【问题讨论】:
-
你有没有试过自己编译代码看看有没有问题?
-
@inetknght 为什么你需要知道?他并没有真正寻求有关编译器错误或类似问题的帮助。我认为那里有足够的信息(如果不是太多)。
-
代码编译但有时我会崩溃,因为线程试图访问 m_timer 而另一个线程已删除 m_timer。所以我想我需要在destroy()和thread_method()中使用互斥锁,不是吗?
标签: c++ boost timer boost-thread