Sobes.tech
Middle+
65

Чӣ гуна коди бо шарти рақобатро ислоҳ кардан, то ки он қарорнокӣ кор кунад?

Ширкатҳо дар куҷо пурсиданд
OZONOZON

Ҷавоб аз AI

sobes.tech AI

Race condition возникает, когда несколько горутин (потоков) одновременно обращаются к общим данным без должной синхронизации, что приводит к непредсказуемому поведению программы.

Чтобы исправить код и сделать его детерминированным, нужно использовать механизмы синхронизации:

  • Mutex (sync.Mutex) — блокирует доступ к общим данным, позволяя работать с ними только одной горутине за раз.
  • Channel — для передачи данных между горутинами, что позволяет избежать совместного доступа.
  • sync.WaitGroup — для ожидания завершения горутин.

Пример исправления с использованием мьютекса:

package main

import (
	"fmt"
	"sync"
)

func main() {
	var mu sync.Mutex
	counter := 0
	var wg sync.WaitGroup

	for i := 0; i < 100; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			mu.Lock()
			counter++
			mu.Unlock()
		}()
	}

	wg.Wait()
	fmt.Println("Counter:", counter)
}

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