![](/img/trans.png)
[英]boost::interprocess::managed_shared_memory: Grow(): Memory Reused?
[英]boost interprocess mutex in managed_shared_memory
我在進程1中創建了一個線程:創建boost :: interprocess :: managed_shared_memory段。 在此部分中,我使用自定義分配器分配boost :: interprocess :: deque,並使用默認分配器創建boost :: interprocess :: interprocess_mutex和2 boost :: interprocess :: interprocess_condition變量。 我使用find_or_construct方法創建它們。
我有另一個進程(進程2),該進程使用在進程2中打開的boost :: interprocess :: managed_shared_memory段上的find方法打開它們。
我知道Managed_shared_memory段具有內核或文件系統持久性,而interprocess_mutex / interprocess_condition變量具有進程級別的持久性。
我陷入困境的場景。
1)進程1啟動創建所有內容的線程。
2)進程2啟動並打開所有內容,在此階段共享內存和同步運行良好。
3)進程1重新啟動嘗試再次創建所有內容的線程(我相信它不應該,因為我正在使用find_or_construct)
4)即使進程1中的線程已執行了通知,進程2仍在等待條件變量的等待調用上。
在我應該如何創建共享內存和互斥體/條件方面,或者在持久性方面,我是否缺少某些東西? 我在Windows上運行此代碼。
考慮使用:
boost::interprocess::named_mutex
boost::interprocess::scoped_lock<boost::interprocess::named_mutex>
boost::interprocess::named_condition
而不是在現有的共享內存塊中分配互斥體和條件變量。 Boost為您處理了許多混亂的細節。
注意:您在進程空間而不是共享內存中創建這些named_ *對象。 Boost將為您創建包含互斥量和條件變量的實際共享內存段。
我還很難嘗試將共享內存段兩次映射到同一進程中。 當您運行Process1線程的第二個實例試圖創建一個新的映射而舊的映射仍然存在時,是否有可能?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.