2014-04-06 9 views
5

Die Dokumentation für boost :: lockfree :: queue erwähnt, dass Push kann mehr Platz zuweisen, wenn es sein muss. Jedoch kann ich nicht für das Leben von mir herausfinden, wie man eine solche Warteschlange instanziiert, und ich kann kein Beispiel dafür finden. Alle Beispiele auf der Boost-Website haben eine feste Kapazität.Wie macht man eine boost :: lockfree :: queue dynamisch Größe ändern

Dies ist die Dokumentation ich war auf der Suche: http://www.boost.org/doc/libs/1_54_0/doc/html/boost/lockfree/queue.html

Antwort

6

Der Standardwert für die Warteschlange so bemessen zu sein, variabel ist. Dies wird durch den Vorlagenparameter typename ...Options gesteuert.

Weiterhin gibt es einen Fehler, bei dem die Warteschlange eine statisch festgelegte Kapazität erfordert, auch wenn die Warteschlange eine variable Größe hat. Dies kann vermieden werden, indem der Konstruktor verwendet wird, der eine anfängliche Kapazität benötigt.

Ein variabler Größe Warteschlange kann als instanziiert werden:

boost::lockfree::queue<T> newQueue(0); 
// or equivalently: 
boost::lockfree::queue<T, boost::lockfree::fixed_sized<false> > newQueue(0); 

einem geleimten Warteschlange fixiert explizit die fixed_sized Option true oder liefern eine Größe mit der boost::lockfree::capacity Option muss.

Siehe Abschnitt Policies in der Nähe des Beginns der Dokumentation, die Sie verknüpft haben.

+0

Danke für die Antwort. Ich habe das Gefühl, dass ich über etwas verwirrt sein muss. Wenn ich eine Warteschlange wie hier vorgeschlagen instanziiere, scheitert es mit einer Assertion "Assertion' has_capacity 'ist fehlgeschlagen. " Ich kann dem Konstruktor eine Größe übergeben, die diese Behauptung nicht trifft, aber dann scheint es sich in einer festen Größe zu verhalten. –

+1

Siehe meine Bearbeitung. Ich glaube, die Behauptung ist ungültig, (das ist ein Fehler in Boost.Lockfree). Die Anforderung sollte entweder dokumentiert werden oder die Assertion sollte geändert werden, um auch zu überprüfen, ob die Warteschlange tatsächlich fest ist. – Mankarse

+0

Ich denke, die Behauptung ist in Ordnung. Es behauptet, dass ** eine anfängliche Kapazität sein muss (entweder weil es fest ist, ** oder **, weil es beim Bau passiert ist). Daher ist es illegal, eine Warteschlange mit dynamischer Größe ohne anfängliche Kapazität zu erstellen. Kannst du auf den relevanten Fehlerbericht/die Diskussion verweisen, um deine Behauptung "Es gibt einen Fehler" zu unterstützen? – sehe

Verwandte Themen