如果应用程序是针对Windows Vista或更高版本的,我们是否可以将所有critical sections替换为SRW locks?由于临界区是互斥的,对于使用它相当于专用模式下的SRW锁,对吗?根据MSDN,SRW针对速度和空间进行了优化。这样做有什么缺点吗?我不确定CS和SRW是如何在内部由Microsoft实现的。
谢谢!
答案 0 :(得分:10)
参见Joe Duffy的书“Windows上的并发编程”,第289页。
你问题的简短答案是“差不多”。存在递归获取的CRITICAL_SECTION的语义,它们对于SRWL是不同的。如果您的程序利用了Win32关键部分的这些特性,那么您就无法轻易批量切换到SRWL。但是,您可以在包装器中包装SRWL以提供类似CS的语义,但这样做有一些细微之处,因此如果您依赖于此类行为,最好坚持使用CS。
Kenny Kerr's article描述了两者如何在内部实施。