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.