siehe WP
Es gibt einen Erzeuger, der Daten erzeugt, und ein Verbraucher, der Daten verbraucht.
Sie kommunizieren über einen Puffer. Der Puffer ist als Ringpuffer ausgelegt.
Hier die Lösung in ADA mit protected Object Buffer.
Bau mit gnatmake main.
Siehe auch: Die Lösung in C++