Вопрос: Чем mutex отличается от канала и когда что выбирать?
Go
Junior
Без компании
Вопрос: Чем mutex отличается от канала и когда что выбирать?
Ответы
Mutex защищает критическую секцию (shared memory). Каналы — коммуникация и синхронизация (communicating sequential processes).
Mutex пример:
```go
package main
import (
"fmt"
"sync"
)
func main() {
var (
mu sync.Mutex
x int
wg sync.WaitGroup
)
for i := 0; i < 100; i++ {
wg.Add(1)
go func() {
defer wg.Done()
mu.Lock()
x++
mu.Unlock()
}()
}
wg.Wait()
fmt.Println(x)
}
```
Каналы чаще для пайплайнов/сигналов/очередей задач; mutex — когда нужно быстро защитить общий ресурс.