Все зависит от того, что обеспечивают эти семафоры.
1. Семафоры обеспечивают синхронизацию потоков. Тогда будут выполнены P(S!) в первом потоке и P(S2) во втором, причем более быстрый процесс подождет, а затем работа пойдет одновременно с точки P(S2) в первом потоке и P(S1) во втором.
2. Семафоры захватывают ресурсы. В этом случае произойдет взаимная блокировка. Например, P(S2) в первом потоке будет ждать некоего ресурса, захваченного вторым потоком, а P(S1) во втором потоке - ресурса, захваченного первым потоком.
3. Семафоры запрещают одновременное выполнение некоторого общего участка кода. Также возможна взаимная блокировка по принципу, описанному выше.
//PascalABC.NET 3.2 сборка 1318
Const
gal=4,54609;
Var
x:real;
begin
readln(x);
writeln(x*gal);
end.
//2
Var
b1,q:real;
n:integer;
begin
readln(b1,q,n);
if (b1=0) or (q=0) then
begin
writeln('b1=0 or q=0');
exit;
end
else
if q=1 then
begin
writeln('Sum=',b1*n);
writeln('Bn=',b1);
end
else
begin
Writeln('Sum=',b1*(1-power(q,n))/(1-q));
Writeln('Bn=',b1*power(q,n-1));
end;
end.
Var a,b,c:real;
begin
writeln('введите значения трех углов:');
readln(a,b,c);
if (a+b+c)<>180 then writeln('введены некорректные данные')else
if (a=90)or(b=90)or(c=90) then writeln('прямоугольный')else
if (a=b)and(b=c) then writeln('равносторонний')else
if (a=b)or(b=c)or(a=c) then writeln('равнобедренный')else
writeln('разносторонний')
end.
Var n,i: integer;
priz: boolean;
begin
write('n = '); readln(n);
repeat
priz:=true;
for i:=2 to round(sqrt(n)) do
if n mod i=0 then
begin
priz:=false;
break;
end;
if priz then write(n)
else inc(n);
until priz;
end.
n = 121
127