Middle
Există o problemă de siguranță a firelor: dacă două goroutines apelează Lock cu un ciclu în același timp, se pot amesteca între ele. Cum se poate remedia acest lucru?
sobes.tech AI
Răspuns de la 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, одна будет ждать, пока другая не завершит выполнение цикла, что предотвратит перемешивание.