`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.