Len by ma zaujímalo, či je vlákno v kritickej časti, dá sa tomu predísť?
- Závit A: Zadajte CR
- Závit A: Dostanete pozastavenie
- Závit B: Chce vstúpiť do ČR, ale nemôže, pretože Závit A má zámok
ak Závit A zamedzené, a tak je zámok mutex prilepený Závit A, čo sa s tým dá robiť?
odpovede:
5 pre odpoveď č. 1Samozrejme, dá sa to predísť. Inak by sa iné vlákna mohli pokúsiť vstúpiť do tejto kritickej sekcie, ak jediným vláknom, ktoré je povolené bežať v rámci procesu, je vlákno, ktoré vlastní kritickú časť?
Vlákno B vo vašom príklade počká, kým vlákno Aje preplánovaný a je zakončený kortikálnou časťou. Žiadne prekvapenie. A ak vlákno A, zatiaľ čo je v kritickej časti, tiež čaká na mutex vlastnený hlavou B, potom je to zablokovanie, ktoré musíte vyriešiť revidovaním svojej logiky.
6 pre odpoveď č. 2
Predpokladajme, že vlákno A má vyššiu priorituvlákno C. Teraz predpokladajme, že vlákno B má v skutočnosti vyššiu prioritu ako C. Ak sa B stane spustiteľným, máte klasický prípad inverzie priority; Vlákno B (vysoká priorita) uviazlo pri čakaní na zdroj v držbe vlákno A (nízka priorita). Jeden liek na toto sa nazýva prioritné dedičstvo.
S prioritným dedičstvom, keď B blokuje preprostriedok držaný A (kritická časť), vlákno A dočasne „zdedí“ prioritu vlákna B. To umožňuje A predísť tomu, aby obťažoval vlákno C so strednou prioritou, a keď je A vykonané so zdrojom, A sa vráti späť k pôvodnému prioritou. Týmto sa A takpovediac dostane z B, eliminuje sa zablokovanie.