java - CAS编程的优缺点

标签 java c++ lock-free compare-and-swap lockless

<分区>

谁能给我总结一下比较和交换编程的优点和缺点? (例如多核 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中专门讲讲。

最佳答案

优点:没有锁,因此没有死锁,通常具有更好的可扩展性

缺点:有饿死的风险(除非算法也是免等待的,但一般不会这样)

edit:wait-free algorithms 在 CAS race 失败时做一些操作,而不是 busytrying/startvation。

关于java - CAS编程的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16899686/

相关文章:

java - 如何使 EditText 从任何语言而不是符号中获取输入字符

c++ - 如何在 C++ 中有效地对四重结构进行排序?

c++ - 无锁pop()中使用引用参数返回值的缺点

java - 无锁圆阵

c++ - C++ 比较和交换例程中的无锁数据结构

java - 使用 JNLP API 获取 .jnlp 文件内资源下的 JAR

java - 如何创建每天自动运行一次的方法

java - 仅替换字符串中的某些空格

c++ - 可能具有长度为零的数组的模板化数据类型

c++ - 模拟练习的时间复杂度