12

如果应用程序针对 Windows Vista 或更高版本,我们可以用SRW 锁替换所有关键部分吗?由于临界区是互斥的,所以在使用上它相当于独占模式下的 SRW 锁,对吧?根据 MSDN,SRW 针对速度和空间进行了优化。这样做有什么缺点吗?我不确定微软如何在内部实现 CS 和 SRW。

谢谢!

4

1 回答 1

12

请参阅 Joe Duffy 的书“Windows 上的并发编程”,第 289 页。

您的问题的简短回答是“几乎”。递归获取的 CRITICAL_SECTION 的语义对于 SRWL 是不同的。如果你的程序利用了 Win32 的临界区的这些特性,那么你就不能轻易地完全切换到 SRWL。但是,您可以将 SRWL 包装在包装器中以提供类似 CS 的语义,但是这样做有很多微妙之处,因此如果您依赖这种行为,最好还是坚持使用 CS。

Kenny Kerr 的文章稍微介绍了两者是如何在内部实现的。

于 2010-08-18T22:53:14.937 回答