Составители:
P(empty); # и поместить результат в буфер
buf = data;
V(full);
}
}
process Consumer[j = 1 to N] {
while (true) {
P(full); # извлечь результат
result = buf;
V(empty);
. . . # и его использовать
}
}
§4 Задача “об обедающих философах”
Задач а “об обедающих философах” иллюстрирует борьбу процессов
за разделяемые ресурсы. Она формулируется следующим образом.
Пять философов сидят возле круглого стола. Они проводят
жизнь, чередуя приемы пищи и размышления. В центре стола сто-
ит блюдо спагетти. Спагетти длинные и запутанные, с ними тяже-
ло управиться, и потому каждому философу во время еды нужно
использовать две вилки. По недосмотру положи ли всег о пять ви-
лок, причем каждая лежит между философами. Ввиду этого они
договорились, что будут есть двумя вилками, а те, у кого не бу-
дет двух вилок, подождут, пока насытятся соседи. Задача состоит
в том, чтобы написать программу, моде лир ующую поведени е фи-
лософов; в ней следует предусмотреть невозможность тупиковой
ситуац ии , при которой каждый философ успел взять одну вилку,
но ни один из них не успел взять вторую.
При компьютерной реализации можно считать, что периоды
приемов пищи и периоды раздумий случайны: для этого можно
использовать датчик случайных чисел.
Рассматриваемые здесь процессы можно представить так:
84
Страницы
- « первая
- ‹ предыдущая
- …
- 81
- 82
- 83
- 84
- 85
- …
- следующая ›
- последняя »
