Хочу реализовать кольцевой буфер на C. Структура должна быть потокобезопасной. Самый простой способ добиться этого - использовать mutex: если какой-то поток хочет записать данные в буфер, то он захватывает mutex, пишет данные и отпускает mutex. Если другой поток хочет прочитать данные - то он захватывает mutex, читает данные и отпускает mutex.
Плюсом такого подхода можно считать консистентность данных. Минусом - чрезмерные блокировки: допустим, я записываю данные с 1 по 5 элемент, а считать хочу с 7 по 10. По идее эти операции не конфликтуют и их можно делать без блокировки. Поэтому возникает вопрос: существуют ли какие-нибудь range mutex или типа того, которые позволяют заблокировать не весь массив с данными, а только его часть. Может быть имеет смысл сделать по mutex на каждый элемент массива? Или это только усугубит ситуацию?