黑马程序员技术交流社区

标题: 线程问题,求指教 !!! [打印本页]

作者: 王海旺    时间: 2013-7-24 11:56
标题: 线程问题,求指教 !!!
本帖最后由 杨兴庭 于 2013-7-25 18:27 编辑

一个CAS计数器程序。这是无锁定且无等待算法,想问下为什么不会等待???
public class SimulatedCAS {
    private int value;
    public synchronized int getValue() { return value; }
    public synchronized int compareAndSwap(int expectedValue, int newValue) {
        if (value == expectedValue)
            value = newValue;
        return value;
    }
}

public class CasCounter {
    private SimulatedCAS value;
    public int getValue() {
        return value.getValue();
    }
    public int increment() {
        int oldValue = value.getValue();
        while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
            oldValue = value.getValue();
        return oldValue + 1;
    }
}


作者: 张强1    时间: 2013-7-24 12:39
基于 CAS 的并发算法称为无锁定算法,因为线程不必再等待锁定(有时称为互斥或关键部分,这取决于线程平台的术语)。无论 CAS 操作成功还是失败,在任何一种情况中,它都在可预知的时间内完成。如果 CAS 失败,调用者可以重试 CAS 操作或采取其他适合的操作。清单 4 显示了重新编写的计数器类来使用 CAS 替代锁定:





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2