🔴 Сложный · 3 очк. Пакет sync
Можно ли копировать sync.Mutex?
A Да
B Нет, это приведёт к багам
C Только через deep copy
D Только в той же горутине
Объяснение вопроса

Копировать не следует. Копия мьютекса - это новое значение с тем же внутренним состоянием. Если оригинал был заблокирован, копия тоже считается заблокированной.

Проблема

Попытка Lock() на копии может привести к deadlock или неопределённому поведению. go vet предупреждает о копировании мьютексов.

var mu sync.Mutex
mu2 := mu  // копия - опасно
mu2.Lock() // может deadlock

Передавайте мьютекс по указателю или встраивайте в структуру по значению (тогда копировать саму структуру нельзя).

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.