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()

Safely add to a variable

Synopsis:

#include <atomic.h>

void atomic_add( 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() 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 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.

Examples:

To safely increment a counter shared between multiple threads:

#include <atomic.h>
...

volatile unsigned count;
...

atomic_add( &count, 1 );

Classification:

QNX Neutrino

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

See also:

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


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