Nehmen wir an, ich habe zwei Puffer. Der Produzent füllt den Puffer # 1 und füllt dann den Puffer # 2. Der Verbraucher konsumiert einen Puffer pro Zeit, und es ist sehr langsam. Während es Puffer # 1 verbraucht, ist der Hersteller bereit, einen weiteren Puffer zu füllen , aber sie sind alle voll, und der Verbraucher hat noch nicht fertig mit # 1. Also, der Produzent wartet.Einfaches Producer-Consumer-Problem, aber der Hersteller aktualisiert die alten Puffer
Anstatt zu warten, möchte ich, dass der Hersteller den "freien" Puffer aktualisiert. Das heißt, während der Verbraucher Puffer # 1 verbraucht, sollte der Hersteller neue Daten in Puffer # 2 schreiben, sobald er bereit ist (die "alten" Daten werden überschrieben und verloren). Wenn der Verbraucher noch nicht mit # 1 abgeschlossen hat und der Produzent mehr Daten zum Schreiben hat, sollte er erneut schreiben auf # 2, und so weiter. Wenn der Konsument schließlich alle Daten in # 1 verbraucht, sollte er sofort beginnen, die frisch geschriebenen Daten in Puffer # 2, , zu verbrauchen und der Hersteller sollte weiterhin # 1 aktualisieren.
(stellen Sie sich vor, der Hersteller Video Frames in Echtzeit mit hoher Geschwindigkeit zu erwerben, während der Verbraucher langsam sie ausarbeitet; der Verbraucher nichts dagegen, wenn es einige Frame überspringt, aber es muss immer das letzte Bild verarbeitet Producer, kann stattdessen nicht verlangsamen noch warten, weil es jeden Frame erwerben muss).
Gibt es eine Möglichkeit, solche Dinge mit Semaphoren zu tun? Ist es ein bekanntes Nebenläufigkeitsproblem? ? Und, falls es möglich ist, dieses Problem auf n> 2 Puffer zu erweitern, ?
Danke!
Unglücklicherweise brauche ich die Lösung auch für den Fall n = 2 Puffer (wenn die Puffer sehr groß sind und der Speicher nicht ist, könnte ich gezwungen sein, nur zwei Puffer zu verwenden, auf Kosten der Verbrauchergeschwindigkeit). – janesconference
Ich habe einige Änderungen hinzugefügt, die helfen könnten. – CookieOfFortune