Конспект установочных лекций по комплексному курсу Информатика, Теория информации




Общие программные переменные - часть 4


В этом случае говорят о старвации

(«морении голодом», бесконечном ожидании; англ. starvation) вызова и соответствующей программы. Старвация имеет место, когда вызов (и соответственно, программа) должен ждать бесконечно долго, хотя все снова и снова возникают возможности продолжить выполнение программы. Если в (бесконечном) ходе работы старвации не возникает, то ход работы называется справедливым. В случае семафоров справедливые ходы работы могут быть реализованы путем введения очередей ожидания. К этому мы вернемся в следующей главе.

Вместо охраняемых критических областей находят также применение мониторы, чтобы координировать доступ к общим переменным. С помощью монитора осуществляется правление доступом к семейству общих переменных. Монитор включает в себя некоторое число фикций, процедур и программных переменных. Процедуры доступны (видимы) извне и могут вызываться из параллельно выполняющихся программ. Основное правило состоит в следующем: в мониторе в каждый момент времени может быть активным не более одного вызова процедуры (взаимные исключения). При этом вместо семафоров используются так называемые сигналы,

которые очень похожи на булевские семафоры. С точки зрения обмена сообщениями сигналы дают нам возможность ожидать определенных простых сообщений.

Пример (задача производитель/потребитель с помощью монитора). Приводимый ниже монитор регулирует доступ к программной переменной q с помощью доступных извне процедур send и receive:

monitor EV

var queue m q; signal nonempty;

proc send == (m x) : q := stock(q, x); nonempty.signal;

proc receive = (var m y):

if isempty(q) then nonempty.wait fi;

q,y:==rest(q),first(q)

q := emptyqueue;

var m x, z := xq, zq;

while b(x) do EV.receive(x);

сonsume (x)

od

while b(z) do produce_next(z);

EV.send(z)

od

Сигнал nonempty при этом соответствует булевской переменной, причем nonempty.signal соответствует nonempty:=true; nonempty.wait соответствует nonempty:=false; await nonempty then пор endwait.

Взаимные исключения доступа к переменным монитора обеспечиваются концепцией монитора.А именно: при мониторах предполагается, что каждая из процедур при взаимных исключениях выполняется до тех пор, пока процедура успешно завершится или же по сигналу наступит ситуация ожидания.




Содержание  Назад  Вперед