C++ 更新期间的boost lock变量向量
几个(2个或更多)客户端线程需要以高频率运行,但后台服务线程每1分钟更新一次主线程使用的变量 在更新的小时刻锁定变量(实际上是向量)的最佳方法是什么,对客户端线程的影响很小 在“正常”(无后台线程)操作期间不需要保护向量,因为所有线程都使用这些值 线程与无尽的while循环一起使用,以更新向量并休眠60秒C++ 更新期间的boost lock变量向量,c++,multithreading,boost,C++,Multithreading,Boost,几个(2个或更多)客户端线程需要以高频率运行,但后台服务线程每1分钟更新一次主线程使用的变量 在更新的小时刻锁定变量(实际上是向量)的最佳方法是什么,对客户端线程的影响很小 在“正常”(无后台线程)操作期间不需要保护向量,因为所有线程都使用这些值 线程与无尽的while循环一起使用,以更新向量并休眠60秒 这似乎是一个读者-作者锁定的好时机。所有客户端都将向量锁定为只读,后台服务线程每分钟仅将其锁定一次以进行写入 它在Boost线程中实现为Boost::shared_mutex 类boost
- 它在Boost线程中实现为
类Boost::shared_mutex
提供了多读/单写互斥体的实现。它实现了boost::shared_mutex
概念 多次并发调用SharedLockable
,lock()
,try\u lock()
,try\u lock\u for()
,try\u lock\u直到()
,timed\u lock()
,try\u lock\u shared\u for()
try\u lock\u shared\u直到(),
,try\u lock\u shared()
和
是允许的timed\u lock\u shared
boost::atomic_int
或类似工具即可。对于向量,考虑使用STD::SysDypPTR(它具有原子支持)。参见例如
sharedlockable听起来很理想,因为“这是标准的多读/单写模式”thnx切换/交换参考似乎也有意义。从而避免了任何读锁定。如果向量大小改变,这是个问题。@GabeRainbow怎么会这样?只有当您持有过时的引用或以其他方式绕过vector类的公共接口时,这才是一个问题。到目前为止,为了给出更具体有用的建议,我们需要更多地了解您(在功能级别上)想要实现的目标。这是可行的,但需要更长的锁定期——对于读者来说。希望影响不大。谢谢