Что помнить при работе с мьютексами?

Middle
757 просмотров
AFK Offer AI

Ключевые правила:

1. Всегда defer Unlock — иначе при панике мьютекс останется заблокированным

mu.Lock()
defer mu.Unlock()

2. Не копировать мьютекс — sync.Mutex нельзя передавать по значению, только по указателю

3. Минимизировать critical section — держать Lock как можно меньше

4. Не вызывать Lock рекурсивно — Go мьютексы не reentrant, будет дедлок

5. RWMutex для read-heavy нагрузки — множество читателей параллельно, один писатель

6. Одинаковый порядок блокировки — если нужно два мьютекса, всегда блокировать в одном порядке, иначе дедлок

7. go vet / race detectorgo test -race находит data races на этапе тестирования

Следующий вопрос

Что такое go generate?