Genau lässt sich das aber nur sagen, wenn man den konkreten Ablauf kennt. Es würde auch abstrakt ohne Code genügen, z.B. auch als Diagramm, wer (Thread XY) wann (während andere Threads laufen? autark? kontrolliert durch einen anderen Thread? ...) was (Schreiben oder Lesen) macht, um einen Überblick zu haben.
Wie eine Seite zuvor beschrieben, hier mit Pseudo-Code.
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.