Sobes.tech
Junior — Middle

Çox ipli tətbiqdə iki ip arasında qarşılıqlı bloklanmanı necə qarşısını almaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

Çox tərəfli kilit (deadlock) iki və ya daha çox iş parçacığının bir-birinin resurslarını sərbəst buraxmasını sonsuz müddətə gözlədiyi zaman baş verir. Deadlock-u qarşısını almaq üçün aşağıdakı yanaşmalardan istifadə etmək olar:

  • İç içə kilidləmələrdən qaçın: eyni zamanda əldə olunan resursların sayını minimuma endirin.
  • Resursların əldə olunma ardıcıllığını müəyyən edin: bütün iş parçacqlarında resursları həmişə eyni ardıcıllıqla əldə edin.
  • Timeoutlardan istifadə edin: kilidi əldə etməyə çalışarkən, sonsuz gözləməni qarşısını almaq üçün timeout istifadə edin.
  • Yüksək səviyyəli sinxronizasiya primitivalarından istifadə edin: məsələn, Android-də java.util.concurrent paketindən, deadlock ehtimalını azaldan.

Resursların ardıcıl əldə olunmasına nümunə:

synchronized (resourceA) {
    synchronized (resourceB) {
        // resurslarla işləmək
    }
}

Əgər bütün iş parçacqları əvvəlcə resourceA, sonra resourceB ardıcıllığını izləsə, deadlock baş verməz.