Delphi-Quellcode:
// Andere Unit erzeugt die Threads aus dem Mainthread heraus
erzeuge Thread 1+2+3 und gebe jedem ein Teil aus einer großen Liste;
// (ja ich weiß, es gibt TParallel.For :P )
// Die Thread-unit selber
-thread-instanzen 1+2+3 (alle selber Code, nur unterschiedliche Listen sind abzuarbeiten)
begin
schleife anfang
_globals.aMultiReadExclusiveWriteSynchronizer.BeginWrite;
setze globale Klasseninstanz := Liste.Items[i]
_globals.aMultiReadExclusiveWriteSynchronizer.EndWrite;
(a)
...
lese hier
...
lese dort
...
lese nochmals hier
(b)
schleife ende
end;
Wie man sieht gibt es genau eine einzige Stelle in dieser Thread-
Unit, wo geschrieben wird. Alles danach ist nur noch lesen.
Um das Sync zu machen, musst du dennoch von jedem Lesen 'BeginRead' und danach 'EndRead' machen! Nur fürs Schreiben BeginWrite/EndWrite reicht nicht!