Sobes.tech
Middle+

Hogyan fordulhat elő olyan helyzet, amikor alacsonyabb prioritású sor kerül hozzáféréshez a magasabb prioritású sor előtt?

sobes.tech MI

Válasz az MI-től

Ez a prioritás-átfordulás miatt fordulhat elő.

A prioritás-átfordulás akkor fordul elő, amikor egy alacsony prioritású feladat egy erőforrást (például mutexet) tart, amely szükséges egy magas prioritású feladathoz. A magas prioritású feladat blokkolva várja az erőforrás felszabadulását. Eközben egy közepes prioritású feladatot más feladat preemptálhat, amely nem szükséges ehhez az erőforráshoz. Ennek eredményeként a közepes prioritású feladat fut, miközben az alacsony prioritású, erőforrást tartó feladat és a blokkolt magas prioritású feladat várnak. Valójában a magas prioritású feladat arra vár, hogy a közepes és az alacsony prioritású feladatok felszabadítsák az erőforrást.

A prioritás-átfordulás problémájának megoldásai:

  • Prioritás öröklése (Priority Inheritance): Amikor egy alacsony prioritású feladat tart egy erőforrást, amely szükséges egy magas prioritású feladathoz, ideiglenesen megkapja a magas prioritású feladat prioritását. Az erőforrás felszabadítása után a prioritás visszatér az eredeti értékre.
  • Prioritási plafon protokoll (Priority Ceiling Protocol): Minden erőforráshoz hozzárendelnek egy "prioritási plafont" — a legmagasabb prioritást az összes olyan feladat között, amely használhatja ezt az erőforrást. Egy feladat csak akkor férhet hozzá az erőforráshoz, ha aktuális prioritása magasabb, mint az összes foglalt erőforrás plafonprioritása (beleértve azokat is, amelyeket már tart).

Az iOS-en a Grand Central Dispatch (GCD) és az Operation Queues mechanizmusokat kínálnak a prioritás-átfordulás minimalizálására, de összetettebb blokkolási szcenáriókban ezek a helyzetek még akkor is előfordulhatnak, ha helytelenül használják őket.