atomic_flag_test_and_set(), atomic_flag_test_and_set_explicit()

Updated: April 19, 2023

Atomically set a flag (C11)

Synopsis:

#include <stdatomic.h>

_Bool atomic_flag_test_and_set( volatile atomic_flag *obj );

_Bool atomic_flag_test_and_set_explicit( volatile atomic_flag *obj,
                                         memory_order order );

Arguments:

obj
A pointer to the atomic flag that you want to set.
order
(atomic_flag_test_and_set_explicit() only) The memory_order to use for the operation.

Library:

Description:

The atomic_flag_test_and_set() and atomic_flag_test_and_set_explicit() functions atomically set the given atomic flag to true and return the previous value. The atomic_flag_test_and_set() function orders memory access according to memory_order_seq_cst; atomic_flag_test_and_set_explicit() orders them as specified by order.

The implementation of atomic functions may depend on the architecture. For more information, see LL/SC vs LSE atomic operations in the description in Building Embedded Systems of the cpuinfo area of the system page.

Returns:

The previous value.

Classification:

C11

Safety:  
Cancellation point No
Interrupt handler Read the Caveats
Signal handler Read the Caveats
Thread Yes

Caveats:

If this function is lock-free (see atomic_is_lock_free()), it's safe to call it from an ISR or signal handler.