Eisenberg & McGuire algoritmus - Eisenberg & McGuire algorithm - Wikipedia
Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
The Eisenberg & McGuire algoritmus je algoritmus pro řešení problému kritických sekcí, obecná verze problém jídelních filozofů. To bylo popsáno v roce 1972 autorem Murray A. Eisenberg a Michael R. McGuire.
Algoritmus
Všechny n-procesy sdílejí následující proměnné:
výčet stát = {LÍNÝ, ČEKÁNÍ, AKTIVNÍ};stát vlajky[n];int otáčet se;
Proměnná otáčet se je libovolně nastaveno na číslo mezi 0 a n−1 na začátku algoritmus.
The vlajky proměnná pro každý proces je nastavena na ČEKÁNÍ, kdykoli má v úmyslu vstoupit do kritická sekce. vlajky trvá buď IDLE nebo WAITING nebo ACTIVE.
Zpočátku vlajky proměnná pro každý proces je inicializována na IDLE.
1 opakovat { 2 3 /* oznámit že my potřeba the zdroj */ 4 vlajky[i] := ČEKÁNÍ; 5 6 /* skenovat procesy z the jeden s the otáčet se nahoru na sebe. */ 7 /* opakovat -li nutné dokud the skenovat najde Všechno procesy líný */ 8 index := otáčet se; 9 zatímco (index != i) {10 -li (vlajky[index] != LÍNÝ) index := otáčet se;11 jiný index := (index+1) mod n;12 }1314 /* Nyní předběžně Nárok the zdroj */15 vlajky[i] := AKTIVNÍ;1617 /* nalézt the za prvé aktivní proces kromě sebe, -li žádný */18 index := 0;19 zatímco ((index < n) && ((index = i) || (vlajky[index] != AKTIVNÍ))) {20 index := index+1;21 }2223 /* -li tam byly Ne jiný aktivní procesy, A -li my mít the otáčet se24 nebo jinak kdokoli má to je líný, pak pokračovat. v opačném případě, opakovat25 the Celý sekvence. */26 } dokud ((index >= n) && ((otáčet se = i) || (vlajky[otáčet se] = LÍNÝ)));2728 /* Start z KRITICKÉ SEKCE */2930 /* Nárok the otáčet se a pokračovat */31 otáčet se := i;3233 /* Kritický Sekce Kód z the Proces */3435 /* Konec z KRITICKÉ SEKCE */3637 /* nalézt A proces který je ne LÍNÝ */38 /* (-li tam jsou Ne ostatní, my vůle nalézt sebe) */39 index := (otáčet se+1) mod n;40 zatímco (vlajky[index] = LÍNÝ) {41 index := (index+1) mod n;42 }4344 /* dát the otáčet se na někdo že potřeby to, nebo držet to */45 otáčet se := index;4647 /* my're hotovo Nyní */48 vlajky[i] := LÍNÝ;4950 /* ZBYTEK Sekce */
Viz také
- Dekkerův algoritmus
- Petersonův algoritmus
- Lamportův pekárenský algoritmus
- Szymańského algoritmus
- Semafory