什么是 CAS(Compare-and-Swap)操作?它在并发编程中有什么作用?
CAS 是 Compare and Swap 的缩写,中文意思是“比较并交换”。它是一种用于实现多线程同步的技术,主要用于解决多线程并发情况下的数据一致性问题。
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。当且仅当内存位置的值与预期原值相匹配时,才会将该位置的值更新为新值。否则,就什么都不做。最后,CAS 操作总是返回该位置的旧值。
这个操作是原子的,它可以确保不会有两个线程同时改变同一个内存位置的值,因此被广泛用于实现多线程环境下的无锁数据结构。
例如,假设有一个共享的计数器,多个线程需要对其进行加一操作。使用 CAS 可以确保每个线程都能正确地将计数器加一,而不会出现因为线程之间的竞争条件导致的结果不正确。每个线程都会尝试用 CAS 将计数器的值从 N 更新为 N+1,如果失败(即返回的旧值不等于 N),那么就重试,直到成功为止。