簡體   English   中英

提高managed_shared_memory中的進程間互斥量

[英]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.

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