Back to questions
Касперский
Senior
3
Что из списка является средствами синхронизации в Go? Каналы, sync.WaitGroup, sync.Mutex, sync.Cond?
Companies where asked
Answer from AI
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)