`atomic_sub_int`

,

`atomic_sub_int_nv`

,

`atomic_sub_long`

,

`atomic_sub_long_nv`

—

atomic subtraction operations

```
#include
<sys/atomic.h>
```

`void`
`atomic_sub_int`

(

`volatile
unsigned int *p`,

`unsigned int v`);

`unsigned int`
`atomic_sub_int_nv`

(

`volatile
unsigned int *p`,

`unsigned int v`);

`void`
`atomic_sub_long`

(

`volatile
unsigned long *p`,

`unsigned long
v`);

`unsigned long`
`atomic_sub_long_nv`

(

`volatile
unsigned long *p`,

`unsigned long
v`);

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

The value referenced by the pointer

`p` is
decremented by the value

`v`.

`atomic_sub_int`

(),

`atomic_sub_int_nv`

(),

`atomic_sub_long`

(), and

`atomic_sub_long_nv`

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

`atomic_sub_int`

and

`atomic_sub_long`

perform the subtraction
without returning any knowledge of the value at

`p`.

`atomic_sub_int_nv`

and

`atomic_sub_long_nv`

return the value at

`p` after the subtraction was performed.

atomic_add_int(9),

atomic_dec_int(9)
The atomic_sub functions first appeared in

OpenBSD
5.5.