簡體   English   中英

將互斥鎖放在C / C ++中的Windows上的內存映射文件中

[英]Putting a mutex in a memory mapped file on windows in C/C++

Windows是否提供可以放置在內存映射文件中並在多個進程中使用的任何類型的互斥鎖?

理想情況下,它必須完全自包含,以便它可以在文件中自行存活,即使在重新啟動時也是如此。 此外,如果我只是在沒有進程運行的情況下手動刪除文件,則不應泄漏任何資源。

如果可能,解決方案還應提供附帶的“條件”概念,該概念也應該是可以位於共享內存映射文件中的對象。

簡而言之,我需要類似於具有SHARED屬性的PTHREADS互斥鎖。

據我所知,僅使用PTHREADS互斥鎖是不可能的,因為在PTHREADS的Windows端口中不支持SHARED屬性。

要共享同步對象,請在創建對象時為其指定名稱並在每個進程中使用相同的名稱。

以下同步對象可以在進程之間共享:

關鍵部分無法共享,但速度更快。

使用wait函數系列(通常是WaitForMultipleObjects)來測試或等待這些對象。

使用該文件作為自己的互斥鎖:使用LockFileEx函數並讓每個人同意在他們想要聲明互斥鎖時鎖定文件的字節0。

那是不可能的。 互斥對象本身存在於內核空間中,以防止用戶代碼弄亂其狀態。 您獲得的句柄僅對獲取它的過程有效。 從技術上講,您可以使用DuplicateHandle()並將返回的句柄放在mmf中,但前提是您有另一個訪問內存部分的進程的句柄。 這相當脆弱。

這就是您可以在CreateMutex()函數中為互斥鎖指定名稱的原因。 另一個進程通過在OpenMutex調用中使用相同的名稱來訪問它。

暫無
暫無

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

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