gpt4 book ai didi

c++ - 在两个线程之间共享 deadline_timer

转载 作者:行者123 更新时间:2023-11-30 02:41:26 26 4
gpt4 key购买 nike

我需要在两个线程之间共享一个 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);

它是线程安全的吗?

谢谢。

最佳答案

不,那没有用。

atomic 仅使指针的存储/加载 不可分割。当您取消引用它时,您只是直接访问 deadline_timer,不同步。

所以你可以

  • 只是围绕对截止时间计时器的所有访问的传统线程同步(例如,使用 mutex)

  • 使用 Asio strand 创建“逻辑”执行线程,并注意仅从该 strand 访问死线计时器。

strand 方法可能更有效,但需要您更准确地考虑执行流程,以免意外造成数据竞争

关于c++ - 在两个线程之间共享 deadline_timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com