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>
):
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
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.
Tags und Links c++ shared-memory boost lock-free interprocess