簡體   English   中英

提高共享內存的有效性

[英]Boost Shared Memory validity

我正在使用Boost共享內存跨進程共享向量。

在客戶端中,一旦我嘗試打開共享內存並從中讀取一個向量,我怎么能知道該內存無效或不是我要的內容。

如果內存段不存在, Open_Only是否會失敗?如果存在,我如何捕獲此失敗?

同樣,如果沒有引用,則應該刪除共享內存段。 但是,就我而言,即使客戶端和服務器都關閉了,並且沒有其他東西在訪問共享內存,該段仍保留在Program數據的Boost Interprocess文件夾中,其中包含一些數據。 因此,下一次客戶端啟動時,打開段沒有問題,因此認為實際上沒有數據要共享時,它正在訪問正確的數據。

好心提醒。 謝謝。

從基礎shm api的經驗講起-而不是作為Boost專家...

為了確定有效性,一種技術是確定當前進程是否是第一次創建共享內存的進程。 您可以通過在創建(fstat)之后獲取大小並查看大小是否為零來實現。 如果為零,則表明該進程正在創建。 一旦知道可以對其進行初始化。 同樣,當您調用truncate()在此處設置大小時,將為所有其他進程設置該大小。

為了確保刪除,您可以調用shm_unlink()從系統中刪除共享內存文件。 我相信在Boost中有一個remove()API可以做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM