如果shared_lock是“活动的”,则unique_lock将阻塞直到锁释放为止?

时间:2019-05-29 19:08:39

标签: c++ mutex boost-mutex

std :: shared_lock锁(mutex_)到底如何?和std :: unique_lock lock(mutex_);工作?

我想实现以下想法:

  1. 线程安全结构的多个读取器和写入器:我已经有了一个线程安全的数据结构,该结构支持并发追加和读取,而无需外部同步。
  2. 每隔一段时间(例如每100毫秒),我想要一个单独的后台线程来安全地删除并重新分配一个新的相似结构。取消分配此结构时,没有读者或作者可以访问它。时间很严格,因此,我希望在执行过程中能做到公平。例如,当后台线程确定是时候删除该结构时,应该对其进行优先级排序。

我的问题是我是否应该使用shared_lock和unique_lock函数来实现这一点。显然,所有添加和搜索操作都应在此结构上获取shared_lock,而delete函数(仅由后台线程执行)必须获取unique_lock。后台线程是否会阻塞,直到所有shared_lock超出范围?另外,该库是否保证一定的公平性,或者在连续的追加/搜索操作的情况下,后台线程将永远被阻止?

提前感谢您的时间, 迪米特拉

0 个答案:

没有答案