18. Алгоритм
синхронизации процессов на примере USER-MAKER с буфером
неограниченной емкости. Производитель
и Потребитель пользуются буфером большого размера, который представляет собой
бесконечную очередь.
Действия: как
только Производитель подготовит запись он добавляет ее в конец очереди. Как
только Потребитель готов использовать запись он берет первую запись из начала
очереди. Необходимо предусмотреть ситуацию чтобы Потребитель не читал из пустой
очереди. Для этого необходимо хранить информацию о числе записей в очереди.
Введем
необходимые взаимные исключения. Предположим, что "ждать" и
"свершить" являются CS по отношению к числу (N), тогда все действия,
связанные с событием "число (N)", выполняются в этих критических
участках.
Алгоритм исполнения процессов
"Производитель-Потребитель" с буфером большого размера:
GLB buffer
GLB namber(N)
SEMAPHORE
(interexeption)
N=0
CO{Вызвать MAKER Вызвать USER
СО}
Описание (определение) процессов
"Потребитель- Производитель" с буфером большого размера:
MAKER
|
USER
|
Local record
{
make (record)
P(interexeption);
Add(buffer, record);
V(interexeption);
Doit(N++);
}
|
Local record
{
wait (0<N=N-1);
P(interexeption);
get(buffer, record);
V(interexeption);
Use(record);
}
|
Временная диаграмма
синхронизации процессов "Производитель-Потребитель"
с буфером большого размера.
|