Чтобы решить актуальную проблему, объявите блокировку изменяемой.
Следующее мое профессиональное мнение:
Компилятор вправе жаловаться, и вы правы, считая это слегка оскорбительным. Если выполнение операции только для чтения требует блокировки, а блокировки должны быть доступны для записи для блокировки, то, вероятно, вы должны сделать запрос только для чтения требующим неконстантного доступа.
РЕДАКТИРОВАТЬ: Хорошо, я укушу. Я видел, как такие модели вызывают серьезные перфоменты в тех местах, которые вы не ожидаете. Кто-нибудь здесь знает, как tolower
или toupper
может стать основным узким местом, если вызывается достаточно часто, даже при использовании стандартного языкового стандарта ASCII? В одной конкретной реализации библиотеки времени выполнения C, созданной для многопоточности, была сделана блокировка для запроса текущей локали для этого потока. Вызов tolower
порядка 10000 или более раз привел к большему количеству перфомций, чем к чтению файла с диска.
То, что вам нужен доступ только для чтения, не означает, что вы должны скрывать тот факт, что вам нужно заблокировать его, чтобы получить его.