【发布时间】:2013-06-03 14:55:43
【问题描述】:
谁能给我总结一下比较和交换编程的优缺点? (例如多核 CPU 性能)
以下是 Java 中的示例:
/**
* Atomically increments by one the current value.
*
* @return the updated value
*/
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
=== 编辑===
请在单/核 CPU 中专门讨论这个问题。
【问题讨论】:
-
@Neyt:感谢您删除错误的标签,但请在有标签时添加正确的标签。有一个
[compare-and-swap]标签。 -
@PeterCordes 确实,没想到会有自己的标签,谢谢。
-
@Neyt:我不确定为什么 cmpxchg 也需要自己的标签,但 CAS 与 load-linked+store-conditional 是原子 RMW 操作的两个基本构建块;硬件通常提供一种或另一种。 en.wikipedia.org/wiki/Compare-and-swap 它确实带有特定于 CAS 的问题,例如 ABA 问题。因此,它不像硬件提供的每个可能的原子 RMW 都有标签那样随意(例如,x86 可以在没有 CAS 重试循环的情况下进行原子增量和各种其他事情。)
标签: java c++ lock-free compare-and-swap lockless