In einem Thread ist es erstmal grundsätzlich egal, ob man BeginRead und BeginWrite verschachtelt.
Aber es könnte zu einem DeadLock führen, wenn mehrere Thread sowas machen.
Jedenfalls muß/sollte man bei einer Verschachtelung immer das "Höherwertige" zuerst sperren.
höherwertig/restriktiv = Write
niederwertig/extensiv = Read
keine Probleme
Delphi-Quellcode:
Thread 1:
BeginRead
...
EndRead
Thread 2:
BeginRead
...
BeginWrite
...
EndWrite
...
EndRead
Wenn aber zwei/mehrere Threads das machen, was Thread 2 macht,
dann würden alle Threads bei BeginWrite für immer auf die jeweils Anderen warten, welche gleichzeitig via BeginRead gesperrt haben, wärend sie auf BeginWrite warten, da BeginWrite darauf wartet, daß sich kein anderer Thread im Lese-
und Schreibzugriff befindet.
Das Selbe geschieht auch, wenn man z.B. zwei/mehrere CriticalSections verschachtelt ... auch da muß man überall die CS in der selben Reihenfolge sperren und muß immer alle "höheren" mit sperren.
z.B. CS1, CS2 und CS3 müssen immer in dieser Reihenfolge gesperrt wernden und selbst wenn man nur CS2 braucht, dann muß dennoch vorher CS1 gesperrt werden, damit kein DeadLock entstehen kann.