РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
803 of 815 menu

Метод fetch_add

Метод fetch_add класса atomic атомарно прибавляет заданное число к текущему значению атомарной переменной и возвращает то значение, которое было до прибавления. В первый параметр мы передаем число, которое нужно прибавить, а во второй необязательный параметр - порядок доступа к памяти (memory_order). Метод гарантирует, что операция «чтение-изменение-запись» выполнится как единое целое, без вмешательства других потоков.

Синтаксис

atomic.fetch_add(value, [order])

Пример

Давайте прибавим число 5 к атомарной переменной, изначально равной 10, и выведем возвращённое предыдущее значение:

#include <iostream> #include <atomic> using namespace std; int main() { atomic<int> num(10); int res = num.fetch_add(5); cout << res << endl; cout << num.load() << endl; return 0; }

Результат выполнения кода:

10 15

Пример

Давайте с помощью метода fetch_add посчитаем, сколько раз несколько потоков увеличили общий счётчик:

#include <iostream> #include <atomic> #include <thread> using namespace std; atomic<int> counter(0); void worker() { for (int i = 0; i < 1000; i++) { counter.fetch_add(1); } } int main() { thread t1(worker); thread t2(worker); t1.join(); t2.join(); cout << counter.load() << endl; return 0; }

Результат выполнения кода:

2000

Смотрите также

  • класс atomic,
    который представляет атомарные переменные
  • метод load,
    который атомарно читает значение переменной
  • метод store,
    который атомарно записывает значение переменной
  • метод exchange,
    который атомарно заменяет значение переменной
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить