【问题标题】:Can boost spin_condition be used for process synchronization?boost spin_condition 可以用于进程同步吗?
【发布时间】:2022-01-10 07:30:16
【问题描述】:

我在interprocess_condition看到下面的代码,我知道interprocess_condition用于进程同步,但我不确定spin_condition是否可以。

   private:
   #if defined(BOOST_INTERPROCESS_CONDITION_USE_POSIX)
      ipcdetail::posix_condition m_condition;
   #elif defined(BOOST_INTERPROCESS_CONDITION_USE_WINAPI)
      ipcdetail::winapi_condition m_condition;
   #else
      ipcdetail::spin_condition m_condition;   // this condition
   #endif

怀疑

因为我发现spin_condition是通过volatile关键字变量实现的。 volatile关键字变量可以用作进程间的共享内存吗?

   spin_mutex  m_enter_mut;
   volatile boost::uint32_t    m_command;
   volatile boost::uint32_t    m_num_waiters;

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    可以。记忆就是这样,记忆。

    如果您在进程之间共享它,它可以有效地使来自不同进程的线程在该内存位置方面表现得像来自同一进程的线程。

    但是,除非锁争用非常罕见,否则没有回退的自旋锁会导致非常低效的功耗和吞吐量。或者,如果您不关心效率,但您关心绝对延迟,您将必须严格控制线程调度(有多少线程共存于同一台机器/NUMA 节点/...、线程亲和性、线程优先级和实际-时间调度选项仅举几例)。实际上,除非您已经知道问题的答案,否则您将无法控制,因此建议必须远离仅自旋锁同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2011-01-26
      • 2011-06-13
      • 1970-01-01
      • 2013-05-30
      相关资源
      最近更新 更多