2011-03-17 93 views
3

我正在爲臨界區使用互斥鎖。我有一個設計約束, 1)如果2個讀取發生在2個不同的線程中,那麼關鍵部分應該可用於兩者。 2)如果發生寫操作,則應該阻止在其他線程上讀取 3)如果發生了讀操作,則應該阻塞在其他線程上寫操作。讀寫之間的互斥

我不知道這樣做與Createmutex,openmutex,waitforsingleobject和releasemutex apis。

+0

如果你想在Windows中進行內部進程鎖定,你應該使用臨界區而不是互斥鎖。但是無論如何你都想要一個讀寫器鎖! – 2011-03-17 09:14:32

回答

4

你在找什麼是Reader-Writer lock。它在互聯網上有一些實現,例如this one

+4

一個警告:讀寫器鎖*不能公平。您還應該仔細查看讀寫器鎖定包 - 如果它允許將共享鎖轉換爲排它鎖,則應該避免它 - 如果不引入死鎖的可能性,則無法實現shared-> exclusive。如果軟件包作者留在共享 - >獨佔API中,這意味着他們真的沒有考慮讀寫器鎖定中固有的同步問題。 – 2011-03-17 05:36:09

0

如果您的同步/關鍵部分問題僅限於單個進程和許多線程,我建議您使用Critical Section Objects而不是Mutex Objects。你從msdn鏈接的頁面上有幾個例子。閱讀鏈接的msdn頁面,如果你有基本的併發同步概念和所需的Windows Api知識,那麼你應該立即滾動,如果沒有閱讀。從api的角度來看,沒有什麼特別的關於Mutexes和Critical Sections的東西。