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

Safely clear a variable

Synopsis:

#include <atomic.h>

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

Arguments:

loc
A pointer to the value that you want to clear bits in.
bits
The bits that you want to clear.

Library:

libc

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

Description:

The atomic_clr() 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 clear the 0x10101010 bits in a flag:

#include <atomic.h>
...

volatile unsigned flags;
...

atomic_clr( &flags, 0x10101010 );

Classification:

QNX Neutrino

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

See also:

atomic_add(), atomic_add_value(), atomic_set(), atomic_set_value(), atomic_sub(), atomic_sub_value(), atomic_toggle(), atomic_toggle_value()


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