Ich würde noch die Zeiger konsequent mit den "Atomic" Funktionen abfragen und setzen.
Delphi-Quellcode:
FReadPosition: integer;
FWritePosition: integer;
FCanReadCount: integer;
FCanWriteCount: integer;
So kann man die aus einigen Lock-Blöcken rausziehen, und vermeidet unnötiges Locken.