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.concurrentpaketində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.