假设我使用锁层次结构来避免死锁。如果我使用读取器-写入器互斥锁,我应该如何考虑和使用它们?在每个读写互斥锁的层次结构中是否存在(我能想到的)不同的读锁和写锁吗?(如果是,这意味着这两个锁可以在层次结构中分配不同的级别。)使用读写互斥锁是否会在层次结构中引入死锁的可能性?(如果是,如何(如果可以)避免这种情况?)那么“可升级”锁(读取器锁可以转变为写入器锁,而无需先解锁互斥锁)呢?
是的,我已经看到了尽可能避免(特别是读取器-写入器)互斥锁的建议。这不是关于是否普遍使用它们的问题;只是假设存在一个问题,最好由读取器-写入器互斥锁来解决。同样,不要仅仅因为您通常喜欢锁层次结构而建议它们的替代方案。(但是,如果将读取器-写入器互斥锁与锁层次结构相结合确实会引入死锁的可能性,请随时建议对所使用的概念进行更改。)
知道我正在考虑使用Boost Thread库的多线程程序可能会有所帮助。读取器-写入器互斥锁类在这里称为shared_mutex;unique_lock是独占(写入器)锁;shared_lock是共享(读取器)锁;upgrade_lock是可以临时升级为写入器锁的读取器锁。
发布于 2011-05-05 11:31:45
为了进行锁排序,您必须将其视为单个锁。如果您有锁A和读写锁B,并且有两个线程执行此操作:
等待
他们仍然会僵持不下。
https://stackoverflow.com/questions/5886151
复制相似问题