Middle
35
Жіп қауіпсіздігі мәселесі бар: егер екі горутин бір уақытта Lock шақырса, олар араласа алады. Бұл қалай түзеледі?
Сұралған компаниялар
FinFrame
AI-дан жауап
sobes.tech AI
Проблема возникает из-за того, что две горутины одновременно заходят в критическую секцию, и их циклы перемешиваются, нарушая потокобезопасность.
Чтобы исправить это, нужно использовать мьютекс (sync.Mutex) для синхронизации доступа. Мьютекс гарантирует, что только одна горутина может выполнять код внутри Lock в один момент времени.
Пример:
var mu sync.Mutex
func criticalSection() {
mu.Lock()
defer mu.Unlock()
for i := 0; i < 10; i++ {
// критическая работа
fmt.Println(i)
}
}
Таким образом, если две горутины вызовут criticalSection, одна будет ждать, пока другая не завершит выполнение цикла, что предотвратит перемешивание.