## NAME

`atomic_add_int`

,
`atomic_add_int_nv`

,
`atomic_add_long`

,
`atomic_add_long_nv`

—
atomic addition operations

## SYNOPSIS

```
#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`);

## DESCRIPTION

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

## CONTEXT

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

## RETURN VALUES

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

## SEE ALSO

## HISTORY

The atomic_add functions first appeared in NetBSD 5.0 and OpenBSD 5.5.