**atomic_cas_uint**,

**atomic_cas_ulong**,

**atomic_cas_ptr** —

atomic compare-and-swap operations
**#include
<sys/atomic.h>**
`unsigned int`
**atomic_cas_uint**(

`volatile
unsigned int *p`,

`unsigned int
expected`,

`unsigned int
new`);

`unsigned long`
**atomic_cas_ulong**(

`volatile
unsigned long *p`,

`unsigned long
expected`,

`unsigned long
new`);

`void *`
**atomic_cas_ptr**(

`volatile
void *p`,

`void
*expected`,

`void
*new`);

The atomic_cas set of functions provide an interface for atomically performing
compare-and-swap operations with respect to interrupts and multiple processors
in the system.

The value referenced by the pointer

`p` is
compared against

`expected`. If these values
are equal then

`new` replaces the value stored
at

`p`.

**atomic_cas_uint**(),

**atomic_cas_ulong**(), and

**atomic_cas_ptr**() can all be called during
autoconf, from process context, or from interrupt context.

These functions return the value at

`p` as it was
before the attempt to swap it.

atomic_swap_uint(9)
The atomic_cas functions first appeared in

NetBSD 5.0
and

OpenBSD 5.5.