2017-08-09 3 views
0

Ich schreibe ein C++ - Programm in Qt mit einem OnReceive (int value) -Ereignis. Es fängt und push_back ganzzahlige Werte in den std :: Vektor. Auf einem anderen Arbeitsthread habe ich Zugriff auf diesen Vektor und ich kann ein Semaphor setzen, um auf 20 Werte zu warten, und dann kann ich sie verarbeiten.Producer and Consumer Optimization

Ich möchte einige Optimierung tun.

Meine Frage ist, wie kann ich meinen Puffer oder Vektor in 3 Teile von 0-4, 5-10, 11-19 so zum Beispiel segmentieren, sobald 5 Werte im Vektor verfügbar sind (zB 0 bis 4) beginnt der zweite Arbeiter sie zu verarbeiten, während der erste Thread weiterhin die restlichen Werte erhält?

auf diese Weise möchte ich eine Überschneidung zwischen meinen Threads haben. Sie müssen also nicht seriell ausgeführt werden.

Vielen Dank.

+0

Suchen Sie im Internet nach "double buffering". –

Antwort

0

Verwenden Sie einen wartefreien Ringpuffer.

-Boost beansprucht one

Hinweis es im Schloss frei Ordner haben, ist aber alle Methoden Anspruch Fäden sicher und warten frei zu sein.