Предположим, я использую иерархию блокировки, чтобы избежать тупика.Если я использую мьютексы читателя-писателя, как я должен думать о них и использовать их?Существует ли (могу ли я думать) отдельная блокировка чтения и записи в иерархии для каждого мьютекса читателя-писателя?(Если да, это будет означать, что этим двум блокировкам могут быть назначены разные уровни в иерархии.) Вводит ли использование мьютексов чтения-записи возможности тупика в иерархию?(Если да, как (если вообще) этого можно избежать?) Как насчет «обновляемых» блокировок (блокировки считывателя, которые можно превратить в блокировки записи без предварительной блокировки мьютекса)?
Да, я имеювидел совет избегать (особенно читатель-писатель) мьютексов, если это возможно.Это не о том, использовать ли их вообще;просто предположим, что существовала проблема, лучше всего решаемая мьютексами читателя-писателя.Точно так же, не предлагайте альтернативы иерархии блокировок только потому, что вы обычно предпочитаете их.(Однако, если объединение мьютексов читатель-писатель с иерархиями блокировок действительно приводит к возможности взаимоблокировок, не стесняйтесь предлагать изменения в используемых концепциях.)
Может быть полезно знать, что я думаю о многопоточностипрограммы, использующие библиотеку Boost Thread.Класс мьютекса читателя-писателя там называется shared_mutex;unique_lock - эксклюзивная (писательская) блокировка;shared_lock - это общая (читательская) блокировка;upgrade_lock - это блокировка считывателя, которую можно временно обновить до блокировки писателя.