Алгоритми Деккера і Патерсона
Алгоритм Деккера
bolean flag[2];
snt turn;
void P0(){
while(True)
{
flag[0]= true;
while(Flag[1])
if turn == 1
{
flag[0] = false;
while (turn == 1)
/* wait */;
flag[0] = true;
// критическая секция
turn = 1;
flag[0] = false;
// ocтальной код
}
}
}
void P(1){
while(True)
{
flag[1]= true;
while(Flag[0])
if turn == 0
{
flag[0] = false;
while (turn == 0)
/* wait */;
flag[1] = true;
// критическая секция
turn = 0;
flag[1] = false;
// ocтальной код
}
}
void main(){
flag[0] = false;
flag[1] = false;
turn = 0;
parbegin(P0, P1)
}
Алгоритм Петерсона
bolean flag[2];
іnt turn;
void P0(){
while(True)
{
flag[0] = true;
turn = 1;
while(flag[1])&&(turn == 1)
/* wait */;
/* критическая секция */
flag[0] = false;
/* остальной код */
}
}
void P1(){
while(True)
{
flag[1] = true;
turn = 0;
while(flag[0])&&(turn == 0)
/* wait */;
/* критическая секция */
flag[1] = false;
/* остальной код */
}
}
void main(){
flag[0] = false;
flag[1] = false;
parbegin(P0, P1)
}