[ Previous | Next | Contents | Home | Search ]
AIX Version 4.3 Kernel and Subsystems Technical Reference, Volume 1

compare_and_swap Kernel Service

Purpose

Conditionally updates or returns a single word variable atomically.

Syntax

#include <sys/atomic_op.h>
boolean_t compare_and_swap (word_addr, old_val_addr, new_val)
atomic_p word_addr;
int *old_val_addr;
int new_val;

Parameters

word_addr Specifies the address of the single word variable.
old_val_addr Specifies the address of the old value to be checked against (and conditionally updated with) the value of the single word variable.
new_val Specifies the new value to be conditionally assigned to the single word variable.

Description

The compare_and_swap kernel service performs an atomic (uninterruptible) operation which compares the contents of a single word variable with a stored old value; if equal, a new value is stored in the single word variable, and TRUE is returned, otherwise the old value is set to the current value of the single word variable, and FALSE is returned.

The compare_and_swap kernel service is particularly useful in operations on singly linked lists, where a list pointer must not be updated if it has been changed by another thread since it was read.

Note: The word variable must be aligned on a full word boundary.

Execution Environment

The compare_and_swap kernel service can be called from either the process or interrupt environment.

Return Values

TRUE Indicates that the single word variable was equal to the old value, and has been set to the new value.
FALSE Indicates that the single word variable was not equal to the old value, and that its current value has been returned in the location where the old value was stored.

Implementation Specifics

The compare_and_swap kernel service is part of the Base Operating System (BOS) Runtime.

Related Information

The fetch_and_add kernel service, fetch_and_and kernel service, fetch_and_or kernel service.

Locking Kernel Services in AIX Kernel Extensions and Device Support Programming Concepts


[ Previous | Next | Contents | Home | Search ]