Для синхронизации используется QWaitCondition и QMutex.
Не "ошибка" но "тревожный симптом". Лучше обойтись чисто сигналами без низкоуровневых примитивов синхронизации.
Но логика приложения усложнилась. Потоки producer и customer могут создаваться в процессе работы программы, при этом взаимосвязь между ними может быть любая. например, может быть конфигурация 1 producer -> buffer -> 2 customer, и одновременно с этим еще 1 producer -> buffer -> 1 customer. Итого у нас 2 кольцевых буфера. Я создал класс BufferManager, где начал использовать QMap<буфер>, но QMap никак не защищен, потому что если использовать QMutex, получается deadlock, когда customer ждет данных, а producer не может их записать, так как QMutex заблокирован customer. Как мне защитить QMap?
Есть "дешевое" решение: заранее создать все буфера и поместить их в QMap. Тогда конкурентный доступ к ней ничем не грозит. Если так не выходит, нужно ставить "свой" QReadWriteLock на эту мапу