在单个线程中拥有多个读取器锁

时间:2018-04-11 14:00:28

标签: c++ multithreading boost-mutex recursive-mutex unique-lock

我的数据加上Lock = boost::shared_mutex。 我使用

锁定数据访问

读者锁定 ReadLock = boost::shared_lock<Lock>

编写器锁定 WriteLock = boost::unique_lock<Lock>

显然,很多读者可能一次只阅读数据,只有一个人在写。但是这里有一个问题:

单个线程可能在同一个互斥锁上有 mutliple readlocks ,因为它调用自己锁定数据的函数(使用ReadLock)。但是,正如我所发现的,这导致了互锁:

  • 线程1读锁数据(Lock1)
  • 线程2等待写锁定(LockW)
  • 线程1在Lock1仍处于活动状态时产生另一个读锁(Lock2)

现在我收到了锁定,因为Lock2正在等待LockW退出,LockW正在等待Lock1Lock1因{停留而被卡住{1}}。

我不知道是否可以更改设计,以便每个线程只执行一次Lock2。我相信拥有 饿死作家 的系统可以解决我的问题。如何处理我的案例是否有常见的方式?

0 个答案:

没有答案