области видимости? Предположим, что в программе есть 2 глобальные map. Если я использую Lock(), то они обе заблокируются? А если хочу их лочить отдельно, то стоит использовать sync.Map? Когда выгоднее использовать sync.Mutex, а когда sync.Map? Заранее спасибо за ответы
P.S. Ситуация вымышлена, просто интересно. Вдруг что-то подобное встретится на практике
он лочит себя
это не конструкция языка, никакой магии
Мьютекс лочит только себя. Вот вы вызываете из двух горутин один и тот же метод, в котором в какой-то момент времени выполняется mx.Lock(). Вот та горутина, которая первая это сделала, пойдёт дальше по методу, а вторая будет в бесконечном цикле крутиться внутри mx.Lock() до тех пор пока первая не разблокирует мьютекс. Ну а внутри там на атомиках, да, посмотрите сами. Там немного и понятно)
Обсуждают сегодня