如果应用程序针对 Windows Vista 或更高版本,我们可以用SRW 锁替换所有关键部分吗?由于临界区是互斥的,所以在使用上它相当于独占模式下的 SRW 锁,对吧?根据 MSDN,SRW 针对速度和空间进行了优化。这样做有什么缺点吗?我不确定微软如何在内部实现 CS 和 SRW。
谢谢!
请参阅 Joe Duffy 的书“Windows 上的并发编程”,第 289 页。
您的问题的简短回答是“几乎”。递归获取的 CRITICAL_SECTION 的语义对于 SRWL 是不同的。如果你的程序利用了 Win32 的临界区的这些特性,那么你就不能轻易地完全切换到 SRWL。但是,您可以将 SRWL 包装在包装器中以提供类似 CS 的语义,但是这样做有很多微妙之处,因此如果您依赖这种行为,最好还是坚持使用 CS。
Kenny Kerr 的文章稍微介绍了两者是如何在内部实现的。