[ Bottom of Page | Previous Page | Next Page | Contents | Index | Library Home |
Legal |
Search ]
Technical Reference: Base Operating System and Extensions, Volume 1
compare_and_swap Subroutine
Purpose
Conditionally updates or returns a single word variable
atomically.
Library
Standard C library (libc.a)
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;
Description
The compare_and_swap subroutine
performs an atomic operation which compares the contents of a single word
variable with a stored old value. If the values are 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 subroutine
is useful when a word value must be updated only if it has not been changed
since it was last read.
Note
The word containing the single word variable must be aligned
on a full word boundary.
Note
If compare_and_swap is used as a locking
primitive, insert an isync at the start of any critical
sections.
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. |
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 previously stored. |
Related Information
The fetch_and_add (fetch_and_add Subroutine)
subroutine, fetch_and_and (fetch_and_and or fetch_and_or Subroutine)
subroutine, fetch_and_or (fetch_and_and or fetch_and_or Subroutine)
subroutine.
[ Top of Page | Previous Page | Next Page | Contents | Index | Library Home |
Legal |
Search ]