【发布时间】:2011-05-04 15:44:34
【问题描述】:
假设我使用锁层次结构来避免死锁。如果我使用读写器互斥锁,我应该如何考虑和使用它们?每个读写器互斥体的层次结构中是否存在(我能想到)不同的读锁和写锁? (如果是,这意味着这两个锁可以在层次结构中分配不同的级别。)使用读写互斥体是否会在层次结构中引入死锁的可能性? (如果是,如何(如果有的话)避免这种情况?)“可升级”锁(无需先解锁互斥锁即可转换为写入器锁的读取器锁)呢?
是的,我已经看到了尽可能避免(特别是读写器)互斥锁的建议。这与是否普遍使用它们无关;只是假设存在一个最好由读写器互斥体解决的问题。同样,不要仅仅因为您通常喜欢它们而建议锁定层次结构的替代方案。 (但是,如果将读写器互斥锁与锁层次结构相结合确实会引入死锁的可能性,请随时建议对使用的概念进行更改。)
知道我正在考虑使用 Boost Thread 库的多线程程序可能会有所帮助。读写器互斥类在此处称为 shared_mutex ; unique_lock 是独占(写入器)锁; shared_lock 是共享(读者)锁; upgrade_lock 是一个读锁,可以临时升级为写锁。
【问题讨论】:
标签: multithreading boost locking mutex deadlock