Sobes.tech
Back to questions
Principal
5

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

Companies where asked
Kaspersky

Answer from AI

sobes.tech AI

В Go из перечисленных средств синхронизации являются:

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

Все перечисленные средства являются средствами синхронизации в Go. Они используются в разных сценариях:

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

Пример использования WaitGroup и 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) // 2