C++ Library -



The header in C++, provides a set of functions to perform atomic operations on shared variables, to enable thread-safe manipulation of data. This header is part of the concurrency support library.

The header shall define the atomic_flag type as a structure type (provides the classic test-and-set functionality) having two states, set and clear.

Including Header

To include the header in your C++ program, you can use the following syntax.

#include 

Functions of Header

Below is list of all functions from header.

Path Manipulation Functions

This path manipulation functions operate on file paths to compose, convert or resolve them.

S.No Functions & Description
1 atomic_is_lock_free

This function checks if the atomic type's operations are lock-free.

2 atomic_store, atomic_store_explicit

These functions atomically replaces the value of the atomic object with a non-atomic argument.

3 atomic_exchange, atomic_exchange_explicit

These functions atomically replaces the value of the atomic object with non-atomic argument and returns the old value of the atomic.

4 atomic_fetch_add, atomic_fetch_add_explicit

These functions adds a non-atomic value to an atomic object and obtains the previous value of the atomic.

5 atomic_fetch_sub, atomic_fetch_sub_explicit

These functions replaces the atomic object with the result of bitwise AND with a non-atomic argument and obtains the previous value of the atomic.

6 atomic_fetch_or, atomic_fetch_or_explict

These functions replaces the atomic object with the result of bitwise OR with a non-atomic argument and obtains the previous value of the atomic.

7 atomic_fetch_xor, atomic_fetch_xor_explict

These functions replaces the atomic object with the result of bitwise XOR with a non-atomic argument and obtains the previous value of the atomic.

8 atomic_flag_test_and_set, atomic_flag_test_and_set_explicit

These functions atomically sets the value of the flag to false.

9 atomic_thread_fence

This function provides generic memory order-dependent fence synchronization primitive.

10 atomic_signal_fence

This function fence between a thread and a signal handler executed in the same thread.

Checking if Operations are Lock-Free

In the below example we are going to use, atomic_is_lock_free to check if atomic operations on a specific atomic type are lock-free.

#include 
#include 
int main() {
    std::atomic atomicInt;
    bool isLockFree = atomic_is_lock_free(&atomicInt);
    std::cout << "Is atomic operation lock-free? " << std::boolalpha << isLockFree << std::endl;
    return 0;
}

Output

If we run the above code it will generate the following output

Is atomic operation lock-free? true
Advertisements