尝试锁定互斥调用与CAS调用的区别

5
作为大多数系统中的互斥锁都是使用CAS操作实现的,我想知道这两个结构的性能比较。
如果一个互斥锁是使用CAS实现的,那么对于该互斥锁的尝试锁定调用是否与CAS操作的性能相同或类似?
由于CAS高度依赖于系统,我在思考它是否可以简单地替换为更为知名和标准化的mutex尝试锁定。
2个回答

4
你的推理是正确的;在任何合理的实现中,“trylock”操作的成本与CAS操作大致相同。然而,通常情况下,CAS不能被trylock替换;trylock是一个更弱的原语,无法操作任意数据。

3
关于CAS和锁的相对性能,不能轻易下结论。不同操作系统实现锁的方式也各异。Win32需要切换到内核进行上下文切换,速度较慢,而Linux则使用用户空间互斥量。性能还会受关键部分的争用程度的影响。此外,你还需要考虑在关键部分中要做什么,是增加一个整数还是执行复杂的操作?因此,有许多变量涉及到相对性能,我们不能就此做出一般性的结论。
建议使用您语言/平台最容易使用的锁抽象。测量其性能,并查看是否符合您的要求。

Win32有用户空间互斥量(CriticalSection),这只是术语问题。 - Andriy Tylychko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接