Sobes.tech
Junior — Middle

Çok iş parçacıklı bir uygulamada iki iş parçacığının karşılıklı kilitlenmesini nasıl önleyebilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Çift taraflı kilitlenme (deadlock), iki veya daha fazla iş parçacığının birbirlerinin kaynaklarını serbest bırakmasını sonsuza dek beklediği durumdur. Deadlock'u önlemek için aşağıdaki yaklaşımlar kullanılabilir:

  • İç içe kilitleri önlemek: aynı anda alınan kaynakların sayısını en aza indirin.
  • Kaynakların edinilme sırasını belirleyin: tüm iş parçacıklarında kaynaklar her zaman aynı sırayla alınmalıdır.
  • Zaman aşımı kullanın: bir kilidi almaya çalışırken, sonsuz beklemeyi önlemek için zaman aşımı kullanın.
  • Daha yüksek seviyeli senkronizasyon primitive'leri kullanın: örneğin, Android'deki java.util.concurrent paketinden, deadlock olasılığını azaltan.

Kaynakların sıralı edinilmesine örnek:

synchronized (resourceA) {
    synchronized (resourceB) {
        // kaynaklarla çalışma
    }
}

Tüm iş parçacıkları önce resourceA, sonra resourceB sırasını takip ederse, deadlock oluşmaz.