CAS

独占锁是一项悲观的技术——它假设最坏的情况,并且只有在确保其他线程不会造成干扰的情况下才能执行下去。

CAS 是一项乐观的技术,它希望能成功地执行更新操作,并且如果有另一个线程在最近一次检查后更新了该变量,那么 CAS 能检测到这个错误。

CAS 包含了 3 个操作数——需要读写的内存位置 V进行比较的值 A 拟写入的新值 B

  • 当且仅当 V 的值等于 A 时,CAS 才会通过原子方式用新值 B 来更新 V 的值,否则不会执行任何操作。

  • 无论位置 V 的值是否等于 A,都将返回 V 原有的值。

CAS 的含义是:“我认为 V 的值应该为 A,如果是,那么将 V 的值更新为 B,否则不修改并告诉 V 的值实际为多少”。

CAS 的典型使用模式是:首先从 V 中读取值 A,并根据 A 计算新值 B,然后再通过 CAS 以原子方式将 V 中的值由 A 变成 B。

通常,当更新失败时(V 的值已经被其他线程改变了),反复地重试是一种合理的策略,但在一些竞争很激烈的情况下,更好的方式是在重试之前首先等待一段时间或者回退,从而避免造成活锁问题。

最后更新于