Sobes.tech
Junior — Middle

Çok iş parçacıklı çalışma sırasında karşılıklı kilitlenme (Deadlock) deneyiminiz oldu mu?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, çok iş parçacıklı programlarda karşılıklı kilitlenme (deadlock) deneyimim oldu. Deadlock, iki veya daha fazla iş parçacığının birbirleri tarafından tutulan kaynakların serbest bırakılmasını sonsuza kadar beklemesi durumudur ve bu da yürütmenin durmasına neden olur.

Örneğin, A iş parçacığı kaynak 1'i almış ve kaynak 2'yi bekliyor, B iş parçacığı ise kaynak 2'yi almış ve kaynak 1'i bekliyorsa, karşılıklı kilitlenme oluşur.

Go'da, bu, doğru senkronizasyon olmadan mutexler veya kanallar kullanıldığında olabilir. Deadlock'tan kaçınmak için:

  • Kaynakları her zaman aynı sırayla alın.
  • Zaman aşımı veya iptal ile bağlamlar kullanın.
  • Kilitleri tutma süresini minimize edin.

Potansiyel bir deadlock örneği, mutexlerle:

var mu1, mu2 sync.Mutex

func f1() {
    mu1.Lock()
    defer mu1.Unlock()
    time.Sleep(time.Second)
    mu2.Lock()
    defer mu2.Unlock()
    // çalışma
}

func f2() {
    mu2.Lock()
    defer mu2.Unlock()
    time.Sleep(time.Second)
    mu1.Lock()
    defer mu1.Unlock()
    // çalışma
}

Burada, f1 ve f2 aynı anda çağrıldığında karşılıklı olarak kilitlenebilirler.