Sobes.tech
Назад к вопросам
Senior
2

Что из списка является средствами синхронизации в Go? Каналы, sync.WaitGroup, sync.Mutex, sync.Cond?

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

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

sobes.tech AI

В Go все перечисленные средства — каналы (channels), sync.WaitGroup, sync.Mutex и sync.Cond — являются механизмами синхронизации, но служат разным целям:

  • Каналы (channels) — позволяют безопасно обмениваться данными между горутинами и служат для синхронизации через передачу сообщений.
  • sync.Mutex — мьютекс для взаимного исключения, предотвращает одновременный доступ к разделяемым ресурсам.
  • sync.WaitGroup — позволяет ждать завершения группы горутин, синхронизируя их завершение.
  • sync.Cond — условная переменная, используется для более сложной синхронизации, когда горутины ждут наступления определённого условия.

Пример использования sync.WaitGroup и sync.Mutex:

var mu sync.Mutex
var wg sync.WaitGroup
counter := 0

wg.Add(2)
go func() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}()
go func() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}()
wg.Wait()
fmt.Println("Counter:", counter)