在更新期间提升锁定变量向量

时间:2014-10-01 06:16:36

标签: c++ multithreading boost

几个(2个或更多)客户端线程需要以高频率运行,但每1分钟一次后台服务线程更新主线程使用的变量。

什么是锁定变量的最佳方法 - 实际上是一个向量 - 在更新的小时刻内对客户端线程影响很小。

在“正常”期间无需保护矢量。 (无后台线程)操作,因为所有线程都使用这些值。

boost :: thread与无限循环一起使用来更新向量并休眠60秒。

1 个答案:

答案 0 :(得分:1)

  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()是允许的。

  2. 也就是说,根据您的实际平台和CPU模型,您可以通过原子变量获得更多的幸运。

    如果它是原始值,只需使用timed_lock_shared()或类似物即可。对于向量,请考虑使用std :: shared_ptr(具有原子支持)。例如。

    你也可以不使用动态分配(尽管你已经使用了矢量),使用两个向量,并将引用切换到" actual"原子地版本。