ВУЗ:
Составители:
67
позиции для записи имени файла в файле «заказов». Процессы-клиенты
считывают значение этой переменной, определяя тем самым очередную
свободную позицию для записи имени файла, после чего значение пере-
меной NEXT увеличивается на единицу.
Прочитать NEXT
Поместить имя файла
RFILE
Нарастить NEXT
.
.
.
Процесс-клиент R
R1
R2
R3
ALPHA
BETA
GAMMA
1
2
3
.
.
.
Печать файлов
из списка
Принт-сервер
Общие данные
NEXT
Разделяемый ресурс
Прочитать NEXT
Поместить имя файла
SFILE
Нарастить NEXT
.
.
.
Процесс-клиент S
S1
S2
S3
прерывание
«Эффект гонок»
R1 R2 R3
S1 S2 S3
R
S
Рисунок 17 – Пример необходимости синхронизации при доступе к одному
файлу заказов
Предположим, что в некоторый момент времени процесс R решил
распечатать свой файл, для чего считал текущее значение переменной
NEXT (пусть NEXT = k). Затем, например, вследствие исчерпания кванта
времени, выделенного процессу, выполнение процесса было прервано.
Очередной процесс S, желающий также распечатать файл, считал
значение k переменной NEXT, поместил в позицию k имя своего файла и
нарастил значение переменной NEXT на единицу.
Когда в очередной раз управление будет передано процессу R, то
он, продолжая свое выполнение, в полном соответствии со считанным
ранее значением текущей свободной позиции, запишет имя файла для
печати в файл «заказов» также в позицию k (поверх имени файла про-
цесса S). Поэтому, файл процесса S не будет напечатан.
Очевидно, что решение проблемы синхронизации в данном случае
зависит от взаимных скоростей процессов и моментов их прерывания,
то есть при других названных параметрах потери файлов при печати
Страницы
- « первая
- ‹ предыдущая
- …
- 65
- 66
- 67
- 68
- 69
- …
- следующая ›
- последняя »