try-lock mutex call vs CAS calls

时间:2011-09-08 14:44:28

标签: c multithreading posix mutex

由于大多数系统中的互斥体是使用CAS操作实现的,我想知道这两种结构的性能比较。

公平地说,如果使用CAS实现互斥锁,那么该互斥锁上的try-lock调用与CAS操作相比将具有相同/相似的性能吗?

CAS,高度依赖系统,我在想是否可以用它更为人熟知/标准化的派生,mutex try-lock来代替它。

2 个答案:

答案 0 :(得分:4)

你的推理是合理的;在任何理智的实施中,“trylock”操作的成本将与CAS大致相同。但是,CAS一般不能被trylock取代; trylock是一个较弱的原语,不能操纵任意数据。

答案 1 :(得分:3)

对于CAS与锁的相对表现有任何说法是不公平的。不同的OS以非常不同的方式实现锁定。 Win32需要上下文切换到内核,这很慢,Linux有用户空间互斥。根据关键部分的争用程度,性能也会有很大差异。您还需要考虑在关键部分中正在做什么,是增加一个整数还是执行复杂操作?因此,相对性能中存在许多变量,您无法对其进行广泛的陈述。

我建议您最简单地使用语言/平台来使用锁定抽象。测量性能,看看它是否可以接受。