2010-08-17 98 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描述了一些关于如何在内部实现的方法。