几个(2个或更多)客户端线程需要以高频率运行,但每1分钟一次后台服务线程更新主线程使用的变量。
什么是锁定变量的最佳方法 - 实际上是一个向量 - 在更新的小时刻内对客户端线程影响很小。
在“正常”期间无需保护矢量。 (无后台线程)操作,因为所有线程都使用这些值。
boost :: thread与无限循环一起使用来更新向量并休眠60秒。
答案 0 :(得分:1)
这似乎是Reader-Writer锁定的好时机。所有客户端都锁定向量以便仅读取,后台服务线程将其锁定以便每分钟写入一次。
SharedLockable
concept from c++14 在Boost Thread中实现为boost::shared_mutex
类
boost::shared_mutex
提供了多读者/单作者互斥体的实现。它实现了SharedLockable
概念。多次并发致电
lock()
,try_lock()
,try_lock_for()
,try_lock_until()
,timed_lock()
,lock_shared()
,try_lock_shared_for()
,{ {1}},try_lock_shared_until()
和try_lock_shared()
是允许的。
也就是说,根据您的实际平台和CPU模型,您可以通过原子变量获得更多的幸运。
如果它是原始值,只需使用timed_lock_shared()
或类似物即可。对于向量,请考虑使用std :: shared_ptr(具有原子支持)。例如。
你也可以不使用动态分配(尽管你已经使用了矢量),使用两个向量,并将引用切换到" actual"原子地版本。