Источник: Nuances of Programming Изучаем Mutex, WaitGroup и Once с примерами В данной статье кратко рассмотрим некоторые конструкции низкоуровневой синхронизации, которые наряду с горутинами и каналами предлагает нам один из самых популярных стандартных библиотечных пакетов Go, а именно пакет sync. Таких конструкций очень много, а мы изучим лишь три из них, зато с примерами: WaitGroup, Mutex и Once. Примеры кода можно найти на GitHub. Поехали! WaitGroup WaitGroup используется для координации в случае, когда программе приходится ждать окончания работы нескольких горутин...
Мютекс позволяет только одному потоку захватить его, тем самым блокируя доступ к общему ресурсу для других потоков. Когда поток захватывает мютекс, он становится его владельцем и может выполнять операции с общим ресурсом. Другие потоки, пытающиеся захватить мютекс, будут блокированы до тех пор, пока текущий владелец не освободит его. Пример использования мютекса в Java: import java.util.concurrent.locks.ReentrantLock;
public class MutexExample {
private static ReentrantLock lock = new ReentrantLock();
...