Теория
Какие ещё случаи deadlock возможны, кроме разного порядка захвата mutex? Нужен ли recursive_mutex?
Рекурсивный (или реентерабельный) мьютекс — это тип примитива синхронизации, который позволяет потоку, уже владеющему мьютексом, снова заблокировать его, не вызывая взаимоблокировку.
Читать ответ