Алгоритм Эйзенберга и Макгуайра - Википедия - Eisenberg & McGuire algorithm

В Алгоритм Эйзенберга и Макгуайра алгоритм решения задачи критических сечений, общий вариант проблема обедающих философов. Он был описан в 1972 г. Мюррей А. Айзенберг и Майкл Р. Макгуайр.

Алгоритм

Все п-процессы разделяют следующие переменные:

перечислить состояние = {ПРАЗДНЫЙ, ОЖИДАЮЩИЙ, АКТИВНЫЙ};состояние флаги[п];int повернуть;

Переменная повернуть устанавливается произвольно на число от 0 до п−1 в начале алгоритм.

В флаги переменная для каждого процесса устанавливается в WAITING всякий раз, когда он намеревается войти в критическая секция. флаги принимает либо IDLE, либо WAITING, либо ACTIVE.
Первоначально флаги переменная для каждого процесса инициализируется значением IDLE.

 1    повторение { 2 3		/* объявить который мы необходимость то ресурс */ 4		флаги[я] := ОЖИДАЮЩИЙ; 5 6		/* сканировать процессы из то один с то повернуть вверх к мы сами. */ 7		/* повторение если необходимо до того как то сканировать находит все процессы праздный */ 8		индекс := повернуть; 9		пока (индекс != я) {10			если (флаги[индекс] != ПРАЗДНЫЙ) индекс := повернуть;11			еще индекс := (индекс+1) мод п;12		}1314		/* сейчас же ориентировочно требовать то ресурс */15		флаги[я] := АКТИВНЫЙ;1617		/* найти то первый активный процесс Помимо мы сами, если любой */18		индекс := 0;19		пока ((индекс < п) && ((индекс = я) || (флаги[индекс] != АКТИВНЫЙ))) {20			индекс := индекс+1;21		}2223	   /* если там мы нет Другой активный процессы, И если мы имеют то повернуть24	   или иначе кто бы ни имеет Это является праздный, тогда продолжить.  Иначе, повторение25	   то весь последовательность. */26    } до того как ((индекс >= п) && ((повернуть = я) || (флаги[повернуть] = ПРАЗДНЫЙ)));2728    /* Начинать из КРИТИЧЕСКИЙ РАЗДЕЛ */2930	/* требовать то повернуть и продолжить */31	повернуть := я;3233    /* Критический Раздел Код из то Процесс */3435    /* Конец из КРИТИЧЕСКИЙ РАЗДЕЛ */3637    /* найти а процесс который является нет ПРАЗДНЫЙ */38	/* (если там находятся нет другие, мы буду найти мы сами) */39	индекс := (повернуть+1) мод п;40	пока (флаги[индекс] = ПРАЗДНЫЙ) {41		индекс := (индекс+1) мод п;42	}4344	/* дайте то повернуть к кто-то который потребности Это, или же держать Это */45	повернуть := индекс;4647	/* мы'повторно законченный сейчас же */48	флаги[я] := ПРАЗДНЫЙ;4950    /* ОСТАВИТЬСЯ Раздел */

Смотрите также

Рекомендации

внешняя ссылка