비교와 교환, 컴페어 앤 스왑(Compare-and-swap, CAS)은 컴퓨터 과학에서 동기화를 달성하기 위해 멀티스레딩에 사용되는 원자적 명령이다. 메모리 위치의 내용을 주어진 값과 비교하고 동일한 경우에만 해당 메모리 위치의 내용을 새로운 주어진 값으로 수정한다. 이는 단일 원자 작업으로 수행된다. 원자성은 최신 정보를 기반으로 새 값이 계산되도록 보장한다. 그 동안 다른 스레드에 의해 값이 업데이트된 경우 쓰기가 실패한다. 작업 결과는 대체를 수행했는지 여부를 나타내야 한다. 이는 간단한 불 응답(이 변형을 비교와 지정, "컴페어 앤 세트", "compare-and-set"라고 함)으로 수행하거나 메모리 위치에서 읽은 값(기록된 값이 아님)을 반환하여 수행할 수 있다.
개요
비교 및 교환 작업은 다음 의사 코드의 원자 버전이다. 여기서 *는 포인터를 통한 액세스를 나타낸다.[1]
function cas(p: pointer to int, old: int, new: int) is
if *p ≠ old
return false
*p ← new
return true
이 작업은 세마포어 및 뮤텍스와 같은 동기화 프리미티브뿐만 아니라 보다 정교한 잠금 및 대기 없음 알고리즘을 구현하는 데 사용된다.
같이 보기
각주
외부 링크