Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 86 стр.

UptoLike

# free=true - ресурс свободен
while(true)
in request(time) and free by time --> free=false;
# and free - условие синхронизации
# by time - выражение планирования
# оно ведет к первоначальному исполнению
# запроса с наименьшим time
[ ] release() --> free=true;
ni
}
end SJN_Allocator
§ 9. Обмен значениями
Здесь возвращаемся к задаче, рассмотренной в параграфе 6; ре-
шение дадим с использованием рандеву. При этом процессы могут
связываться друг с другом непосредственно. Однако, следует предо-
стеречь от ошибки: процессы, сделавшие вызов одновременно, за-
блокируют друг друга. Поэтому один процесс должен выполнять
операторы call и in в одном порядке, а другой в противополож-
ном.
module Exchange[i=1 to 2]
op deposit(int);
body
proc Worker {
int myvalue, othervalue;
if (i==1) { # один процесс вызывает
call Exchange[2].deposit(myvalue);
in deposit(othervalue) --> skip; ni
}
else { # другой процесс получает
in deposit(othervalue) --> skip; ni
call Exchange[1].deposit(myvalue);
}
}
end Exchange
87