0

我有数据加上一个Lock = boost::shared_mutex. 我正在锁定数据访问

读卡器锁 ReadLock = boost::shared_lock<Lock>

作家锁 WriteLock = boost::unique_lock<Lock>

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

单个线程可能在同一个互斥锁上具有多个读锁,因为它正在调用本身锁定数据的函数(使用 a ReadLock)。但是,正如我所发现的,这会导致互锁:

  • 线程 1 读取锁定数据 (Lock1)
  • 线程 2 使用写锁 (LockW) 等待
  • 线程 1 生成另一个读锁 (Lock2),而 Lock1 仍然存在

现在我得到一个锁,因为Lock2正在等待LockW退出,LockW正在等待Lock1,并且Lock1因为Lock2.

我不知道是否可以更改设计,使每个线程只执行一个ReadLock. 我相信拥有一个让Writers 挨饿的系统会解决我的问题。如何处理我的案件有通用的方法吗?

4

0 回答 0