2014-06-09 67 views
0

我們正在更換消息隊列的內部實現(由於總體設計的限制),我想用boost::interprocess::message_queue作爲幾乎簡單的替換。消費boost :: interprocess :: message_queue多個應用程序是否安全?

然而,我們具有在該消息隊列是「滿」的情況下(消費應用程序已經斷開連接或落後)特定的要求,即「最老的」消息被丟棄。

我們可以這樣輕鬆地做到這一點:

do 
{ 
    if(sent = message_queue.try_send(...)) 
    { 
     break; 
    } 
    else 
    { 
     message_queue.receive(...); 
    } 
} 
while(true); 

但是,我無法找到在該國,這是安全的文件引用。這顯然不是消息隊列的傳統用法(從多個應用程序中使用它),但它能保證工作嗎?

回答

2

它很安全。該doc的相關部分是:

線程可以將消息在隊列中,他們也可以從隊列中刪除 消息。

您也可以看看實現,這完全是在頭boost/interprocess/ipc/message_queue.hpp,特別是私有成員函數do_receive()。如果你忽略所有的共享內存機制,它只是一個循環緩衝區(從Boost 1.52開始)用互斥鎖保護。

相關問題