
- C++ Library - Home
- C++ Library - <fstream>
- C++ Library - <iomanip>
- C++ Library - <ios>
- C++ Library - <iosfwd>
- C++ Library - <iostream>
- C++ Library - <istream>
- C++ Library - <ostream>
- C++ Library - <sstream>
- C++ Library - <streambuf>
- C++ Library - <atomic>
- C++ Library - <complex>
- C++ Library - <exception>
- C++ Library - <functional>
- C++ Library - <limits>
- C++ Library - <locale>
- C++ Library - <memory>
- C++ Library - <new>
- C++ Library - <numeric>
- C++ Library - <regex>
- C++ Library - <stdexcept>
- C++ Library - <string>
- C++ Library - <thread>
- C++ Library - <tuple>
- C++ Library - <typeinfo>
- C++ Library - <utility>
- C++ Library - <valarray>
- The C++ STL Library
- C++ Library - <array>
- C++ Library - <bitset>
- C++ Library - <deque>
- C++ Library - <forward_list>
- C++ Library - <list>
- C++ Library - <map>
- C++ Library - <multimap>
- C++ Library - <queue>
- C++ Library - <priority_queue>
- C++ Library - <set>
- C++ Library - <stack>
- C++ Library - <unordered_map>
- C++ Library - <unordered_set>
- C++ Library - <vector>
- C++ Library - <algorithm>
- C++ Library - <iterator>
- The C++ Advanced Library
- C++ Library - <any>
- C++ Library - <barrier>
- C++ Library - <bit>
- C++ Library - <chrono>
- C++ Library - <cinttypes>
- C++ Library - <clocale>
- C++ Library - <condition_variable>
- C++ Library - <coroutine>
- C++ Library - <cstdlib>
- C++ Library - <cstring>
- C++ Library - <cuchar>
- C++ Library - <charconv>
- C++ Library - <cfenv>
- C++ Library - <cmath>
- C++ Library - <ccomplex>
- C++ Library - <expected>
- C++ Library - <format>
- C++ Library - <future>
- C++ Library - <flat_set>
- C++ Library - <flat_map>
- C++ Library - <filesystem>
- C++ Library - <generator>
- C++ Library - <initializer_list>
- C++ Library - <latch>
- C++ Library - <memory_resource>
- C++ Library - <mutex>
- C++ Library - <mdspan>
- C++ Library - <optional>
- C++ Library - <print>
- C++ Library - <ratio>
- C++ Library - <scoped_allocator>
- C++ Library - <semaphore>
- C++ Library - <source_location>
- C++ Library - <span>
- C++ Library - <spanstream>
- C++ Library - <stacktrace>
- C++ Library - <stop_token>
- C++ Library - <syncstream>
- C++ Library - <system_error>
- C++ Library - <string_view>
- C++ Library - <stdatomic>
- C++ Library - <variant>
- C++ STL Library Cheat Sheet
- C++ STL - Cheat Sheet
- C++ Programming Resources
- C++ Programming Tutorial
- C++ Useful Resources
- C++ Discussion
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