Здравствуйте, скажите пожалуйста, можете ли вы помочь мне найти ошибку в коде, уже по всякому пыталась исправить программу, ничего не помогает, я просто в Паскале только новичок, поэтому самостоятельно никак не получается сделать программу рабочей. Я написала программу - счетчик с использованием семафор для параллельного ее запуска, но дело в том ,что если запустить программу один раз, она считает все верно, а если одновременно 2 раза, то совсем ничего не считает....что-то в ней не так..вот код:
program Counter2;
uses
crt;
const
SemaphoreFile = 'Semaphore.txt';
var
x:integer;
procedure Enter_Critical_Section;
begin
repeat
{$I-}
mkdir(SemaphoreFile);
{$I+}
until IOResult = 0;
end;
procedure Leave_Critical_Section;
begin
rmdir(SemaphoreFile);
end;
procedure Counter;
const
CounterFileName = 'Counter.txt';
var
s:text;
rujuk:integer;
begin
Enter_Critical_Section;
begin
Assign (s,'rujuk.txt');
{$I-}
reset(s);
{$I+}
If IOResult=0
Then
begin
reset(s);
read(s,x);
close(s)
end
else
begin
rewrite(s);
x:=0;
end;
inc (x);
rewrite(s);
write(s,x);
close(s);
writeln('Kolichestvo obrashcheniy=',x);
end;
Leave_Critical_Section;
writeln('Kolichestvo obrashcheniy=',x);
end;
begin
for x:=1 to 1000 do Counter;
repeat until KeyPressed;
end.
program Counter2;
uses
crt;
const
SemaphoreFile = 'Semaphore.txt';
var
x:integer;
procedure Enter_Critical_Section;
begin
repeat
{$I-}
mkdir(SemaphoreFile);
{$I+}
until IOResult = 0;
end;
procedure Leave_Critical_Section;
begin
rmdir(SemaphoreFile);
end;
procedure Counter;
const
CounterFileName = 'Counter.txt';
var
s:text;
rujuk:integer;
begin
Enter_Critical_Section;
begin
Assign (s,'rujuk.txt');
{$I-}
reset(s);
{$I+}
If IOResult=0
Then
begin
reset(s);
read(s,x);
close(s)
end
else
begin
rewrite(s);
x:=0;
end;
inc (x);
rewrite(s);
write(s,x);
close(s);
writeln('Kolichestvo obrashcheniy=',x);
end;
Leave_Critical_Section;
writeln('Kolichestvo obrashcheniy=',x);
end;
begin
for x:=1 to 1000 do Counter;
repeat until KeyPressed;
end.
Может ты его не там ищешь?