Sobes.tech
Назад к вопросам
Middle+
3

Когда лучше использовать Mutex, а когда Channel?

Компании, где спрашивали
WaterWal

Ответ от нейросети

sobes.tech AI

Mutex и Channel в Go служат для разных целей синхронизации:

  • Mutex (мьютекс) — используется для защиты доступа к общим данным, чтобы избежать состояния гонки. Он блокирует критическую секцию, позволяя в один момент времени работать с ресурсом только одному горутину.

  • Channel (канал) — используется для коммуникации между горутинами, передачи данных и синхронизации через обмен сообщениями.

Когда использовать:

  • Mutex — если нужно просто защитить разделяемую переменную или структуру данных от одновременного доступа.

  • Channel — если нужно организовать передачу данных, событий или сигналов между горутинами, особенно когда важен порядок или асинхронность.

Пример с Mutex:

var mu sync.Mutex
var counter int

mu.Lock()
counter++
mu.Unlock()

Пример с Channel:

ch := make(chan int)
go func() {
  ch <- 42 // отправка
}()
val := <-ch // получение

Итого: Mutex — для защиты данных, Channel — для коммуникации и синхронизации через сообщения.