Server Side Delphi - Kestral Computing Start Index Next

  MultiThread safe <> SMP Safe

 

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;

 

Grahame Grieve