В соответствии с ответами, найденными в Threads and simple Dead lock cure, а также Herb Sutter ключом к исключению тупика является использование иерархии блокировок.
Есть ли хорошие библиотеки С++, которые поддерживают эту поддержку? Я не могу найти в Boost или Poco.
В идеале это была бы система, которая позволяет определять иерархию во время компиляции. Возможно, это будет выглядеть так:
template<class LowerLevelMutex>
class RankedMutex { ... };
class BottomMutex { ... };
typedef RankedMutex<BottomMutex> L1Mutex;
typedef RankedMutex<L1Mutex> L2Mutex;
typedef RankedMutex<L2Mutex> L3Mutex;
// ...