Operating systems, development tools, and professional services
for connected embedded systems

Developer Resources
Blogs
Board support packages
Foundry27 projects
Forums
Hardware support listing
Online video tutorials
Product documentation

QNX Developer Support

[Previous] [Contents] [Index] [Next]

atomic_add_value()

Safely add to a variable, returning the previous value

Synopsis:

#include <atomic.h>

unsigned atomic_add_value( volatile unsigned * loc,
                           unsigned incr );

Arguments:

loc
A pointer to the value that you want to add to.
incr
The number that you want to add.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The atomic_add_value() function is a thread-safe way of doing an (*loc) += incr operation, even in a symmetric-multiprocessing system.

The atomic_*() functions are guaranteed to complete without being preempted by another thread.

When modifying a variable shared between a thread and an interrupt, you must either disable interrupts or use the atomic_*() functions.

The atomic_*() functions are also useful for modifying variables that are referenced by more than one thread (that aren't necessarily in the same process) without having to use a mutex.


Note: The atomic_add_value() function may be slower than atomic_add().

Returns:

The previous value of loc's contents.

Examples:

To safely increment a counter shared between multiple threads:

#include <atomic.h>
...

volatile unsigned count;
unsigned previous;
...

previous = atomic_add_value( &count, 1 );

Classification:

QNX Neutrino

Safety:
Cancellation point No
Interrupt handler Yes
Signal handler Yes
Thread Yes

See also:

atomic_add(), atomic_clr(), atomic_clr_value(), atomic_set(), atomic_set_value(), atomic_sub(), atomic_sub_value(), atomic_toggle(), atomic_toggle_value()


[Previous] [Contents] [Index] [Next]