Skip to content

Мьютексы

В этой теме мы разберем, что из себя представляет тип sync.Mutex и узнаем, как его использовать. Приступим!

Для упрощения синхронизации между горутинами в Go имеется пакет sync, который предоставляет ряд возможностей, в частности мьютексы. Мьютексы позволяют разграничить доступ к некоторым общим ресурсам, гарантируя, что только одна горутина имеет к ним доступ в определенный момент времени. И пока одна горутина не освободит общий ресурс, другая горутина не может с ним работать.

Тип sync.Mutex

На уровне кода мьютекс представляет тип sync.Mutex. Для блокирования доступа к общему разделяемому ресурсу у мьютекса вызывается метод Lock(), а для разблокировки доступа — метод Unlock().

В какой ситуации нам могут помочь мьютексы? Рассмотрим следующую ситуацию.

Пришло время поработать с кодом!

Функция work сбрасывает значение переменной counter к нулю и в цикле последовательно увеличивает ее значение до 5. В функции main запускается четыре горутин work. Но каким в этом случае будет консольный вывод? Например, таким, как показано ниже.

С полной версией статьи ты можешь ознакомиться по ссылке.