Sobes.tech
Junior — Middle

Çok iş parçacıklı sistemler geliştirirken karşılaştığınız kilitlenme sorunları oldu mu?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, çok iş parçacıklı sistemler geliştirirken, karşılaştığım sorunlardan biri deadlock (ölüm kilidi) idi. Bu, iki veya daha fazla iş parçacığının birbirlerini sonsuza dek engellediği bir durumdur; kaynakların serbest bırakılmasını beklerler ve bu kaynaklar birbirleri tarafından tutulur.

Deadlock'ları önlemek için aşağıdaki uygulamaları yapıyorum:

  • Birden fazla kilidi her zaman aynı sırayla almak.
  • Kilitleri tutma süresini minimize etmek.
  • Kilitleri almaya çalışırken zaman aşımı kullanmak.
  • Go'daki kanallar gibi daha yüksek seviyeli senkronizasyon primitive'leri kullanmak.

İşte Go'da basit bir deadlock örneği:

var mu1, mu2 sync.Mutex

func f1() {
    mu1.Lock()
    defer mu1.Unlock()
    time.Sleep(time.Second)
    mu2.Lock()
    defer mu2.Unlock()
}

func f2() {
    mu2.Lock()
    defer mu2.Unlock()
    time.Sleep(time.Second)
    mu1.Lock()
    defer mu1.Unlock()
}

Burada, f1 ve f2 birbirlerini engelleyebilirler, eğer ikisi de ilk mutex'i alırsa ve ikinciyi beklerse. Bunu önlemek için, mutex'lerin alınma sırasını koordine etmek gerekir.