【问题标题】:Replace critical section with SRW lock用 SRW 锁替换临界区
【发布时间】:2011-03-30 18:04:38
【问题描述】:
如果应用程序针对 Windows Vista 或更高版本,我们可以将所有 critical sections 替换为 SRW locks 吗?由于临界区是互斥的,所以在使用上它相当于 SRW 锁的独占模式,对吧?根据 MSDN,SRW 针对速度和空间进行了优化。这样做有什么缺点吗?我不确定微软内部是如何实现 CS 和 SRW 的。
谢谢!
【问题讨论】:
标签:
multithreading
synchronization
critical-section
slim
【解决方案1】:
请参阅 Joe Duffy 的书“Windows 上的并发编程”,第 289 页。
您的问题的简短回答是“几乎”。递归获取的 CRITICAL_SECTION 的语义对于 SRWL 是不同的。如果你的程序利用了 Win32 的临界区的这些特性,那么你就不能轻易地完全切换到 SRWL。但是,您可以将 SRWL 包装在包装器中以提供类似 CS 的语义,但这样做有很多微妙之处,因此如果您依赖这种行为,最好还是坚持使用 CS。
Kenny Kerr's article 简要介绍了两者在内部的实现方式。