2010-08-17 94 views
6

如果應用程序針對的是Windows Vista或更高版本,那麼我們可以用SRW locks替換所有的critical sections嗎?由於臨界區是互斥的,所以在使用時相當於獨佔模式下的SRW鎖,對吧?根據MSDN的說法,SRW針對速度和空間進行了優化。這樣做有什麼缺點嗎?我不確定CS和SRW是如何由微軟內部實施的。用SRW鎖代替關鍵部分

謝謝!

回答

7

見喬·達菲的書「在Windows併發編程」,頁289.

簡短的回答你的問題是「差不多」。有遞歸獲取的CRITICAL_SECTION的語義與SRWL的不同。如果您的程序利用了Win32的關鍵部分的這些特性,那麼您無法輕鬆批量切換到SRWL。然而,你可以在包裝器中包裝一個SRWL來提供類似於CS的語義,但是這樣做有一些細微之處,所以如果你依賴於這種行爲,你最好堅持CS。

Kenny Kerr's article描述了一些關於如何在內部實現的方法。