Content-type: text/html
#include <sys/atomic.h>
void atomic_inc_8(volatile uint8_t *target);
void atomic_inc_uchar(volatile uchar_t *target);
void atomic_inc_16(volatile uint16_t *target);
void atomic_inc_ushort(volatile ushort_t *target);
void atomic_inc_32(volatile uint32_t *target);
void atomic_inc_uint(volatile uint_t *target);
void atomic_inc_ulong(volatile ulong_t *target);
void atomic_inc_64(volatile uint64_t *target);
void atomic_inc_ptr(volatile void *target);
uint8_t atomic_inc_8_nv(volatile uint8_t *target);
uchar_t atomic_inc_uchar_nv(volatile uchar_t *target);
uint16_t atomic_inc_16_nv(volatile uint16_t *target);
ushort_t atomic_inc_ushort_nv(volatile ushort_t *target);
uint32_t atomic_inc_32_nv(volatile uint32_t *target);
uint_t atomic_inc_uint_nv(volatile uint_t *target);
ulong_t atomic_inc_ulong_nv(volatile ulong_t *target);
uint64_t atomic_inc_64_nv(volatile uint64_t *target);
void *atomic_inc_ptr_nv(volatile void *target);
These functions enable the inrementing (by one) of the value stored in target to occur in an atomic manner.
The *_nv() variants of these functions return the new value of target.
These functions can be called from user, interrupt, or kernel context.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | Evolving |
atomic_add(9F), atomic_and(9F), atomic_bits(9F), atomic_cas(9F), atomic_dec(9F), atomic_or(9F), atomic_swap(9F), membar_ops(9F), attributes(5), atomic_ops(3C)
The *_nv() variants are substantially more expensive on some platforms than the versions that do not return values. Do not use them unless you need to know the new value atomically.