我的数据加上Lock = boost::shared_mutex
。
我使用
读者锁定 ReadLock = boost::shared_lock<Lock>
和 编写器锁定 WriteLock = boost::unique_lock<Lock>
。
显然,很多读者可能一次只阅读数据,只有一个人在写。但是这里有一个问题:
单个线程可能在同一个互斥锁上有 mutliple readlocks ,因为它调用自己锁定数据的函数(使用ReadLock
)。但是,正如我所发现的,这导致了互锁:
现在我收到了锁定,因为Lock2
正在等待LockW
退出,LockW
正在等待Lock1
,Lock1
因{停留而被卡住{1}}。
我不知道是否可以更改设计,以便每个线程只执行一次Lock2
。我相信拥有 饿死作家 的系统可以解决我的问题。如何处理我的案例是否有常见的方式?