Aşa bir vəziyyət necə baş verə bilər ki, aşağı prioritetli növbə, daha yüksək prioritetli növbədən əvvəl resurslara çıxış əldə edir?
sobes.tech Süni İntellekt
AI-dan cavab
Bu, prioritetlərin tərs çevrilməsi səbəbindən baş verə bilər.
Prioritetlərin tərs çevrilməsi, aşağı prioritetli vəzifənin, yüksək prioritetli vəzifə üçün lazım olan resursu (məsələn, mutex) tutması zamanı baş verir. Yüksək prioritetli vəzifə, resursun sərbəst buraxılmasını gözləyərək bloklanır. Eyni zamanda, orta prioritetli vəzifə, bu resursu istifadə etməyən başqa bir vəzifə tərəfindən qabaqlana bilər. Nəticədə, orta prioritetli vəzifə, aşağı prioritetli vəzifə resursu tutarkən və yüksək prioritetli vəzifə, bloklanmış vəziyyətdə, gözləyir. Əslində, yüksək prioritetli vəzifə, orta prioritetli və aşağı prioritetli vəzifələrin resursu sərbəst buraxmasını gözləyir.
Prioritetlərin tərs çevrilməsi probleminin həlli:
- Prioritet irsi (Priority Inheritance): Aşağı prioritetli vəzifə, yüksək prioritetli vəzifə üçün lazım olan resursu tutarkən, ona müvəqqəti olaraq, bloklanmış yüksək prioritetli vəzifənin prioriteti verilir. Resurs sərbəst buraxıldıqdan sonra, prioritet əvvəlki vəziyyətinə qayıdır.
- Prioritet tavan protokolu (Priority Ceiling Protocol): Hər bir resursa, onu istifadə edə biləcək bütün vəzifələr arasında ən yüksək prioritet olan "tavan prioritet" təyin edilir. Bir vəzifə, yalnız onun cari prioriteti, həmin anda istifadə olunan bütün resursların tavan prioritetindən yüksəkdirsə, resursa daxil ola bilər (o cümlədən artıq tutduğu resurslar).
iOS-da, Grand Central Dispatch (GCD) və Operation Queues prioritetlərin tərs çevrilməsini minimuma endirmək üçün mexanizmlərə malikdir, lakin mürəkkəb bloklama vəziyyətlərində, düzgün istifadə edilmədikdə, belə hallar hələ də baş verə bilər.