@butnothero

Почему меняется работа RWMutex в зависимости от его расположения в коде?

Доброго времени суток. Разбирался с мьютексами и возникла проблема с ноткой недопонимания.

По задумке, в консоли должно выводится: h e l l o h e l l o ... и тд. Одна горутина считывает, другая записывает. Проблема заключается в том, что когда я использую RWMutex в Get, вывод становится рандомным, а если вне Get, то вывод правильный.

В чем причина такого поведения, и как сделать так, чтобы RWMutex/Mutex корректно работал внутри Get ?
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Wirusnyy-chel
У вас в обоих случаях mutex защищает только от одновременной записи и чтения из переменной. Фактически порядок вывода не зависит от этого мьютекса, можете убедиться в этом если запустите исполнение несколько раз или добавите разные слипы в горутинах чтения и записи.

Если необходимо синхронизировать потоки записи и чтения лучше использовать каналы.

Как упражнение на mutex могу предложить следующее:
Задать структуру с двумя переменными: где значение первой переменной зависит от второй. Если параллельно обновлять и читать значения можно увидеть следующее:
Без мьютекса чтение может иногда возвращать несогласованное значение между переменными.
С мьютексом значение при чтении будет всегда согласованным.

P.S. В вашем примере для синхронизации переменных достаточно обычного мьютекса. RWMutex будет полезен если читателей больше одного.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы