Предлагаю для рассмотрения примитив синхронизации Checkpoints:
проект github
Описание:
README
Сразу оговорюсь, что не позиционирую этот примитив как убийцу мьютекса, а только предлагаю для рассмотрения как теоретический пример возможной вариации.
Если упрощенно, Checkpoint сводится к синхронизации на флагах, защищенных глобальным локом. Однако его можно рассматривать как разбиение хода выполнения программы на независимые отрезки, выполнение которых синхронизируется в точках — чекпоинтах.
В файле test/test2.cpp реализация многих писателей/многих читателей на чекпоинтах.
Не знаю, как программы синхронизировали до появления мьютексов. Возможно, в те времена использовались похожие на чекпоинты способы.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)