**atomic_add_int**,

**atomic_add_int_nv**,

**atomic_add_long**,

**atomic_add_long_nv** —

atomic addition operations
**#include
<sys/atomic.h>**
`void`
**atomic_add_int**(

`volatile
unsigned int *p`,

`unsigned int v`);

`unsigned int`
**atomic_add_int_nv**(

`volatile
unsigned int *p`,

`unsigned int v`);

`void`
**atomic_add_long**(

`volatile
unsigned long *p`,

`unsigned long
v`);

`unsigned long`
**atomic_add_long_nv**(

`volatile
unsigned long *p`,

`unsigned long
v`);

The atomic_add set of functions provide an interface for atomically performing
add and add-and-fetch operations with respect to interrupts and multiple
processors in the system.

The value referenced by the pointer

`p` is
incremented by the value

`v`.

**atomic_add_int**(),

**atomic_add_int_nv**(),

**atomic_add_long**(), and

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

**atomic_add_int** and

**atomic_add_long** perform the addition without
returning any knowledge of the value at

`p`.

**atomic_add_int_nv** and

**atomic_add_long_nv** return the value at

`p` after the addition was performed.

atomic_inc_int(9),

atomic_sub_int(9)
The atomic_add functions first appeared in

NetBSD 5.0
and

OpenBSD 5.5.