PS:
Delphi-Quellcode:
if not array_lock then
begin
array_lock:=true; //beides muss zusammen ausgeführt werden
Jupp, es muß "zusammen", denn rate mal was passiert, wenn zwei threads gleichzeitig das IF prüfen, noch bevor Einer das auf True gestellt hat ... dann sind zwei Drin.
Lösung:
* eine "richtige" Sperre drumrum (CriticalSection, MultiReaderWriter, ...)
* oder als "atomare" Operation das Vergleichen+Zuweisen, wie z.B.
InterlockedCompareExchange bzw.
AtomicCmpExchange (und LOCK im Assembler)