[fpc-pascal]two questions plz help

Stefan Ziegenbalg stefan.ziegenbalg at mailbox.tu-dresden.de
Wed Jan 16 12:57:30 CET 2002


Jonas Maebe wrote:
> This isn't MT-safe at all. If two threads are in the "while lock_mem do
> delay(1);" loop, it's possible that when something else sets it to
> false, they both check it before the other one has set it to true. You
> need to do the testing and setting as an atomic operation.

But the probability of that event is very low. It can been avoid by
setting lock_mem to a thread specific ID (for example the PID):

var lock_mem  : longint;

procedure getmem2(var pt:pointer; size:longint);
var pid:longint;
begin
pid:=getpid; { maybe getpid needs more time than delay(1) }
repeat
 while lock_mem<>0 do
  delay(1);
 lock_mem:=pid;
 delay(1); 
 until lock_mem=pid;
getmem(pt,size);
lock_mem:=0;
end;


I think this should avoid any pathological cases. :-)


Regards
Stefan


----------------------------------------------
mailto:stefan.ziegenbalg at mailbox.tu-dresden.de
http://www.sziegenbalg.de
http://www.simage.org

------------------------------------------------------------------ 
In a world without walls and fences, who needs Windows and Gates ?




More information about the fpc-pascal mailing list