Nochmals vielen Dank an alle.
Habe mich vorerst für sirius' Lösung entschieden:
Delphi-Quellcode:
if FHead<10 then
InterlockedIncrement(FHead)
else
InterlockedExchangeAdd(FHead,-9);
Auch wenn es so jetzt sauberer ist, möchte ich die anderen Möglichkeiten auch noch verstehen.
Kann mir hierbei noch jemand auf die Sprünge helfen:
Zitat von
sirius:
Allerdings ist das nicht die prinzipielle Vorgehensweise. Diese würde zwar ein paar Performanceverluste bringen, dafür aber "sicherer" sein. Das heißt, man kann einen Synchronisationsfehler nicht so leicht übersehen, wie in deinem Code.
Du müsstest dazu den Zugriff auf DataArray komplett kapseln. Dann liest du mit GetData in eine lokale Variable und kopierst diese gesichert nach in deinen Buffer.