C++ Atomic::store() function



The C++ std::atomic::store() function is used to replace the current value of the atomic variable with a new value, ensuring no other thread can interrupt this operaion. The store() function takes a value and an optional memory order argument, which commands the synchronization behaviour.

Syntax

Following is the syntax for std::atomic::store() function.

void store (T val, memory_order sync = memory_order_seq_cst) volatile noexcept;
void store (T val, memory_order sync = memory_order_seq_cst) noexcept;

Parameters

  • val − It indicates the value to copy to the contained object.
  • sync − It indicates the synchronization mode for the operation.

Return Value

This function does not return anything.

Exceptions

This member function never throws exceptions.

Example

In the following example, we are going to consider the basic usage of the store() function.

#include <iostream>
#include <atomic>
int main()
{
    std::atomic<int> a{0};
    int x = 12;
    a.store(x);
    std::cout << "Stored value: " << a.load() << std::endl;
    return 0;
}

Output

Output of the above code is as follows −

Stored value: 12

Example

Consider the following example, where we are going to use the store() function with the std::memory_order_relaxed.

#include <atomic>
#include <iostream>
int main()
{
    std::atomic<int> a;
    int x = 7;
    a.store(x, std::memory_order_release);
    std::cout << "Stored value: " << a.load(std::memory_order_acquire) << std::endl;
    return 0;
}

Output

Following is the output of the above code −

Stored value: 7

Example

Let's look at the following example, where compare_exchange_strong checks if x equals to a. If true 'b value' is stored automatically.

#include <atomic>
#include <iostream>
int main()
{
    std::atomic<char> x('A');
    char a = 'A';
    char b = 'B';
    x.compare_exchange_strong(a, b);
    std::cout << "New value: " << x.load() << std::endl;
    return 0;
}

Output

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

New value: B
atomic.htm
Advertisements