tgoop.com/golang_interview/301
Last Update:
Стандартная библиотека Go (stdlib) предоставляет два типа мьютексов для синхронизации доступа к общим ресурсам:sync.Mutex:
Это самый простой тип мьютекса, который предоставляется стандартной библиотекой Go. Он обеспечивает эксклюзивную блокировку (exclusive lock), что означает, что только одна горутина может захватить мьютекс и получить доступ к общему ресурсу. Если другая горутина пытается захватить мьютекс, пока он уже заблокирован, она будет ожидать его освобождения.
Пример использования sync.Mutex:var mutex sync.Mutex
var sharedResource int
// Горутина 1
mutex.Lock()
sharedResource = 42
mutex.Unlock()
// Горутина 2
mutex.Lock()
fmt.Println(sharedResource)
mutex.Unlock()sync.RWMutex
: Этот тип мьютекса, называемый также мьютексом чтения/записи (read/write mutex), обеспечивает более гибкую блокировку. Он позволяет нескольким горутинам захватывать мьютекс только для чтения (shared lock), разрешая параллельный доступ к общему ресурсу для чтения. Однако, при записи (exclusive lock) мьютекс блокируется, и другие горутины должны ждать его освобождения.
Пример использования sync.RWMutex:var rwMutex sync.RWMutex
var sharedResource int
// Горутина 1 для записи
rwMutex.Lock()
sharedResource = 42
rwMutex.Unlock()
// Горутина 2 для чтения
rwMutex.RLock()
fmt.Println(sharedResource)
rwMutex.RUnlock()
Оба типа мьютексов, sync.Mutex
и sync.RWMutex, являются потокобезопасными и предоставляют механизмы для синхронизации доступа к общим ресурсам в многопоточной среде. Выбор между ними зависит от требований вашего кода: если вам нужна только эксклюзивная блокировка, используйте sync.Mutex, а если вам требуется поддержка одновременного чтения и блокировки записи, используйте sync.RWMutex.
Пишите свой ответ в комментариях👇
@golang_interview