var g, a, b:integer;
block:boolean;
function ThreadA(p:integer):integer; stdcall;
var i,j:integer;
begin
j := 0;
repeat
inc(j);
for i := 0 to 100000000 do
begin
inc(g);
inc(a);
end;
while not block do sleep(10);
if a-b + g <> 0 then
writeln(j,'not thread safe: (a-b + g = ',a-b + g,')')
else
writeln(j,'ok');
block := false;
until false;
end;
function ThreadB(p:integer):integer; stdcall;
var i:integer;
begin
repeat
for i := 0 to 100000000 do
begin
dec(g);
inc(b);
end;
block := true;
while block do sleep(10);
until false;
end;
|