Стандартная библиотека Go предоставляет два основных типа мьютексов в пакете sync:
sync.Mutex: Базовый мьютекс, обеспечивающий взаимоисключающую блокировку. Может быть в двух состояниях: заблокирован или разблокирован. Только одна горутина может удерживать блокировку в любой момент времени.sync.RWMutex: Мьютекс для чтения/записи. Позволяет множеству горутин одновременно читать данные (получать RLock), но только одной горутине писать данные (получать Lock). Запись блокирует все операции (как чтение, так и запись).Основные методы sync.Mutex:
| Метод | Описание |
|---|---|
Lock() | Блокирует мьютекс. Если мьютекс уже заблокирован, вызывающая горутина блокируется до его освобождения. |
Unlock() | Разблокирует мьютекс. Паника, если мьютекс не был заблокирован вызывающей горутиной. |
Основные методы sync.RWMutex:
| Метод | Описание |
|---|---|
Lock() | Блокирует мьютекс для записи. Блокирует все операции чтения и записи. |
Unlock() | Разблокирует мьютекс для записи. Паника, если мьютекс не был заблокирован для записи. |
RLock() | Блокирует мьютекс для чтения. Не блокирует другие операции чтения. Блокируется, если есть блокировка записи. |
RUnlock() | Разблокирует мьютекс для чтения. Паника, если мьютекс не был заблокирован для чтения. |
RLocker() | Возвращает Locker, который использует RLock и RUnlock. |
Пример использования sync.Mutex:
go
Пример использования sync.RWMutex:
go