Typische Anwendung ist ja sowas wie "serialin=buffered", d.h. im Interrput kommen Daten rein, und von außen werden sie ausgelesen.
Da der Schreiber und der Leser ja jeder nur seinen Pointer(Index) verwenden, vertragen sie sich im Prinzip ja.
Heikel ist nur der Vergleich der Pointer (ob was da ist). Bei Byte-Index, ist das kein Problem, aber (wenn) 16-Bit Words verwendet werden, isses geraten,
vor dem Vergleich ein "disable interrupts"
und nachher wieder ein "enable" zu machen.

Bei 3-Byte "Blöcken" ist die Sache etwas gemischter, denn eigentlich dar der "write pointer" erst verändert werden, wenn wirklich 3 Bytes da sind.

Ich mach das mit einem zusätzlichen "temp" Pointer. d.h. erst wird über den geschrieben, und erst wenn die Message komplett ist, wird der "write" pointer gesetzt.
d.h. Für den Leser sind entweder alle 3 byte da oder garnix.

Klingt wirr, isses auch