Probleme mit boost :: lockfree :: queue im Shared Memory (boost 1.53, gcc 4.7.2 / clang 3.0-6ubuntu3)

8

Ich habe ein Problem mit der Platzierung von boost::lockfree::queue<<T, fixed_sized<false>, ..> im gemeinsamen Speicher. Ich brauche es, weil ich in der Lage sein muss, mehr als 65535 Nachrichten in die Warteschlange einzufügen, und die Warteschlange für fixed_size wird mit 65535 begrenzt.
Der folgende Code funktioniert ordnungsgemäß (aber capacity<...> -Option bedeutet fixed_sized<true> ):

%Vor%

Der folgende Code funktioniert auch richtig (aber es verwendet keinen gemeinsamen Speicher):

%Vor%

Aber wenn ich versuche, es zu kombinieren:

%Vor%

kann nicht mit dem folgenden Protokoll kompiliert werden:

%Vor%

Bitte sagen Sie mir, was ich vermisse

    
uppi 15.02.2013, 11:01
quelle

1 Antwort

14

Die Verwendung von boost::lockfree::queue oder boost::lockfree::stack im gemeinsam genutzten Speicher ist aus Kompatibilitätsgründen auf 65535 Elemente beschränkt. Wenn Sie einen Single-Producer-, Single-Consumer-Anwendungsfall haben, können Sie boost::lockfree::spsc_queue verwenden. Dies ist jedoch auch nicht dynamisch.

Grund dafür ist die Beschränkung auf 32-Bit-Kompatibilität. Für 64-Bit-Plattformen könnte man den boost.lockfree-Code so anpassen, dass er 32-Bit- anstatt 16-Bit-Indizes verwendet. aber es würde einige nicht-triviale Änderungen erfordern, um Dinge richtig zu implementieren.

    
timblechmann 19.02.2013, 12:44
quelle