
- 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::fetch_or() function
The C++ std::atomic::fetch_or() function is used to perform an atomic bitwise OR operation on an atomic variable. It modifies the atomic variable by performing a bitwise OR with the given value. This function ensures that the operation is performed atomically, preventing the data races.
Syntax
Following is the syntax for std::atomic::fetch_or() function.
T fetch_or (T val, memory_order sync = memory_order_seq_cst) volatile noexcept; T fetch_or (T val, memory_order sync = memory_order_seq_cst) noexcept;
Parameters
- val − It indicates the value to apply.
- sync − It indicates the synchronization mode for the operation.
Return Value
This function returns the contained value before the call.
Exceptions
This function never throws exceptions.
Example
In the following example, we are going to consider the basic usage of fetch_or() function.
#include <iostream> #include <atomic> int main() { std::atomic<int> x{0b1100}; int a = x.fetch_or(0b1010); std::cout << "Old Value : " << a << std::endl; std::cout << "New Value: " << x << std::endl; return 0; }
Output
Output of the above code is as follows −
Old Value : 12 New Value: 14
Example
Consider the following example, where we are going to multiple threads with fetch_or() function.
#include <atomic> #include <iostream> #include <thread> std::atomic<int> x = 0b00110; void a() { x.fetch_or(0b11001); } int main() { std::thread x1(a); std::thread x2(a); x1.join(); x2.join(); std::cout << "Result : " << x << std::endl; return 0; }
Output
Following is the output of the above code −
Result : 31
Example
Let's look at the following example, where we are going to use the fetch_or() function with std::memory_order_acq_rel.
#include <atomic> #include <iostream> int main() { std::atomic<int> x = 12; int a = x.fetch_or(3, std::memory_order_acq_rel); std::cout << "Old value: " << a << std::endl; std::cout << "New value: " << x << std::endl; return 0; }
Output
If we run the above code it will generate the following output −
Old value: 12 New value: 15