function
<atomic>

std::atomic_fetch_and

template (integral) (1)
template <class T> T atomic_fetch_and (volatile atomic<T>* obj, T val) noexcept;
template <class T> T atomic_fetch_and (atomic<T>* obj, T val) noexcept;
overloads (2)
T atomic_fetch_and (volatile A* obj, T val) noexcept;
T atomic_fetch_and (A* obj, T val) noexcept;
Apply bitwise AND to contained value
Reads the value contained in obj and replaces it by the result of performing a bitwise AND operation between the read value and val.

The entire operation is atomic (an atomic read-modify-write operation): the value is not affected by other threads between the instant its value is read (to be returned) and the moment it is modified by this function.

The function synchronizes using sequential consistency (memory_order_seq_cst). To modify the value with a different memory ordering, see atomic_fetch_and_explicit.

See atomic::fetch_and and atomic::operator&= for equivalent member functions of atomic.

Parameters

obj
Pointer to an atomic object that contains an integral value.
Type A represents other overloaded atomic types (in case the library does not implement the C-style atomic types as instantiations of atomic).
val
Value to apply.
T is the integral type of the value contained by the atomic object (atomic's template parameter).

Return value

The contained value before the call.
T is the integral type of the value contained by the atomic object (atomic's template parameter).

Data races

No data races (atomic operation). The operation uses sequential consistency (memory_order_seq_cst).

Exception safety

No-throw guarantee: never throws exceptions.

See also