我以爲我會使用Boost.Interprocess的Message Queue代替一個主機內的通信套接字。但在深入研究之後,似乎由於某種原因該庫避開了POSIX消息隊列工具(我的Linux系統支持),而是在POSIX共享內存之上實現。界面非常相似,你可能不會馬上猜到,但似乎是這樣。Boost消息隊列不基於POSIX消息隊列?不可能選擇(2)?
我的缺點是,通過shm_open(3)
獲得的共享內存看起來不適用於select(2)
,與通過mq_open(3)
獲得的POSIX消息隊列不同。
看來Boost的圖書館在這種情況下失敗了。有誰明白知道爲什麼這應該是?即使POSIX消息隊列僅在某些系統上可用,我也希望Boost在可用的地方使用該設施,並僅在必要時重新實現。我還沒有意識到POSIX系統有什麼缺陷嗎?
請注意,在Linux上,不使用自定義螺旋鎖,而是使用pshared互斥鎖和條件變量,這應該與同一進程中的互斥鎖效率幾乎一樣。但是,要選擇`boost :: interprocess`對象,您需要有一個線程監視有問題的對象,並在有些數據正在等待時碰撞fifo或eventfd。 – bdonlan 2009-08-17 14:50:28
仍然沒有解釋爲什麼boost :: interprocess在可用時不使用posix mqueue ...我自己做了一個mqueue abstration,當我在win32上構建時,我的抽象使用boost :: interprocess :: mqueue,並且在linux上構建時,我的抽象使用posix mqueue。這很容易,這就是爲什麼我找不到boost :: interprocess不這樣做的原因。不成熟?我監督的東西? – 2013-03-06 17:47:28