
- 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::operator--() function.
The C++ std::atomic::operator--() function is used for atomic decrement operations on atomic variables. This ensures that the decrement operation is performed atomically, meaning it is thread-safe and free from race conditions.
The operator--() function can be used in both pre-decrement and post-decrement.
Syntax
Following is the syntax for std::atomic::operator--() function.
T operator--() volatile noexcept; T operator--() noexcept; or T operator-- (int) volatile noexcept; T operator-- (int) noexcept;
Parameters
It does not accepts any parameter.
Return Value
It returns the value of the atomic variable before the modification.
Exceptions
This function never throws exceptions.
Example
In the following example, we are going to consider the basic usage of operator--() function.
#include <iostream> #include <atomic> int main() { std::atomic<int> x(8); --x; std::cout << "Result : " << x.load() << std::endl; return 0; }
Output
Output of the above code is as follows −
Result : 7
Example
Consider the following example, where we are going to use the decrement in the loop.
#include <iostream> #include <atomic> int main() { std::atomic<int> x(4); for (int i = 0; i < 3; ++i) { --x; } std::cout << "Result : " << x.load() << std::endl; return 0; }
Output
Following is the output of the above code −
Result : 1
Example
Let's look at the following example, where we are going to use the decrement in a multi thread environment.
#include <iostream> #include <atomic> #include <thread> #include <vector> void a(std::atomic<int>& b) { --b; } int main() { std::atomic<int> x(20); std::vector<std::thread> x1; for (int y = 0; y < 13; ++y) { x1.push_back(std::thread(a, std::ref(x))); } for (auto& t : x1) { t.join(); } std::cout << "Result : " << x.load() << std::endl; return 0; }
Output
If we run the above code it will generate the following output −
Result : 7