2017-08-25 75 views
1

我在寫實時數據來提升共享內存。起初,我用這個,我要訪問的SHM每次:提升進程間共享內存open_or_create每次都會拋出異常

boost::interprocess::managed_shared_memory segment(boost::interprocess::open_or_create, "MySharedMemory",20000000); 

在調試模式下,我發現,這個調用總是拋出此異常:

First-chance exception at 0x00007FFA30BB95FC in testerud.exe: Microsoft C++ exception: boost::interprocess::interprocess_exception at memory location 0x000000000550E1C0. 

但我能夠打開和推我的數據共享內存。我發現了這個問題。我在過程開始時創建了另一個函數open_or create,然後每次使用open_only寫入。沒有例外。

我很好奇背後的原因。

+0

「在調試模式下,我發現這個調用總是拋出這個異常」 - 如果你聲明它的頻率是如何的,那麼_always_失敗? – sehe

+0

另外,如果沒有其他線程/進程,爲什麼每次都打開該段?只要保持該部分打開。否則「實時」很快就會成爲說「狗慢」的好方法 – sehe

+0

是的,它在這裏不相關。我將刪除它。謝謝。 – brownKnight

回答

1

從升壓文檔:

管理的內存段也通過提供用於調試的目的構建的命名和獨特的對象進行迭代的可能性。 注意:此迭代不是線程安全的,因此用戶應該確保沒有其他線程正在操作段中的命名索引或唯一索引(創建,刪除,保留......)。其他不涉及索引的操作可以併發執行(例如,原始內存分配/釋放)。

+0

好的謝謝,但沒有其他線程或進程訪問它。即使情況如此,open_only和open_or_create會有什麼不同。 – brownKnight

相關問題