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

Safely set bits in a variable

Synopsis:

#include <atomic.h>

void atomic_set( volatile unsigned * loc,
                 unsigned bits );

Arguments:

loc
A pointer to the location whose bits you want to toggle.
bits
The bits that you want to set.

Library:

libc

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

Description:

The atomic_set() function is a thread-safe way of doing an (*loc) |= bits operation.

The atomic_*() functions are guaranteed to complete without being preempted by another thread, even in a symmetric-multiprocessing system.

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.

Examples:

To safely set the 1 bit in a flag:

#include <atomic.h>
...

volatile unsigned flags;
...

atomic_set( &flags, 0x01 );

Classification:

QNX Neutrino

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

See also:

atomic_add(), atomic_add_value(), atomic_clr(), atomic_clr_value(), atomic_sub(), atomic_sub_value(), atomic_toggle(), atomic_toggle_value()


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