Составители:
process Philosopher[i = 1 to 4] {
while (true) {
[поразмыслить];
[взять вилки];
[поесть];
[отдать вилки];
}
}
Каждая вилка может идентифицироваться с критической
секцией: ее может взять только один философ. Поэтому ее можно
представить семафором fork[i], i = 0, . . . , 4, которые в начальный
момент инициализируются значением 1 (все вилки доступны).
Однако, каждый философ может взять сначала левую вилку:
тогда все вилки будут разобраны, но ни оди н философ не сможет
приступить к еде — тупиковая ситуация.
Для того, чтобы такая ситуация не могла возникнуть, условим-
ся, что все философы, кроме одного, сначала берут левую вилку,
а затем — правую; но один философ, например, четвертый, все -
гда берет сначала правую вилку, а потом левую; таким образом,
тупикоdая ситуация не может возникнуть.
СХЕМА РЕШЕНИЯ ЗАДАЧИ “ОБ ОБЕДАЮЩИХ
ФИЛОСОФАХ”
sem fork[S] = {1, 1, 1, 1, 1};
process Philosopher[i = 0 to 3] {
while (true) {
P(fork[i]); # взял левую вилку
P(fork[i + 1]); # взял правую вилку
[ест (датчик с.ч.)];
V(fork[i]); # освободил левую вилку
V(fork[i + 1]); # освободил правую вилку
85
Страницы
- « первая
- ‹ предыдущая
- …
- 82
- 83
- 84
- 85
- 86
- …
- следующая ›
- последняя »