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