Ich dachte, ich würde Boost.Interprocess's Nachrichten-Warteschlange anstelle von Sockets für die Kommunikation innerhalb eines Hosts. Aber nachdem ich nachgeforscht habe, scheint es, dass diese Bibliothek aus irgendeinem Grund die POSIX-Nachrichtenwarteschlangenfunktion (die mein Linux-System unterstützt) umgeht und stattdessen auf der Grundlage von POSIX Shared Memory implementiert ist. Die Schnittstelle ist so ähnlich, dass man das vielleicht nicht sofort vermutet, aber es scheint der Fall zu sein.
Der Nachteil für mich ist, dass gemeinsamer Speicher, der über shm_open(3)
scheint nicht verwendbar zu sein mit select(2)
im Gegensatz zu POSIX-Nachrichtenwarteschlangen, die über mq_open(3)
.
Es scheint, dass die Boost-Bibliothek in diesem Fall verliert. Weiß jemand, warum das so sein sollte? Selbst wenn POSIX-Nachrichtenwarteschlangen nur auf einigen Systemen verfügbar sind, würde ich erwarten, dass Boost diese Möglichkeit nutzt, wo sie verfügbar ist, und sie nur bei Bedarf neu implementiert. Gibt es einen Fallstrick des POSIX-Systems, den ich noch nicht kenne?