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

Метод exchange

Метод exchange класса atomic атомарно заменяет текущее значение атомарной переменной на новое и возвращает предыдущее значение. Операция является атомарной, то есть никакой другой поток не может вмешаться между чтением старого значения и записью нового. В первый параметр мы передаем новое значение, которое нужно записать, а во второй необязательный параметр - порядок памяти memory_order, по умолчанию используется memory_order_seq_cst.

Синтаксис

atomic<T>::exchange(value, [order])

Пример

Давайте создадим атомарную переменную со значением 1 и заменим его на 2, сохранив предыдущее значение:

#include <iostream> #include <atomic> using namespace std; int main() { atomic<int> a(1); int old = a.exchange(2); cout << "old: " << old << endl; cout << "new: " << a.load() << endl; return 0; }

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

"old: 1" "new: 2"

Пример

Давайте продемонстрируем, что exchange возвращает именно то значение, которое было до записи. Заменим строку "abcde" на "12345":

#include <iostream> #include <atomic> #include <string> using namespace std; int main() { atomic<string> a("abcde"); string old = a.exchange("12345"); cout << "old: " << old << endl; cout << "new: " << a.load() << endl; return 0; }

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

"old: abcde" "new: 12345"

Пример

Давайте явно укажем порядок памяти вторым параметром:

#include <iostream> #include <atomic> using namespace std; int main() { atomic<int> a(1); int old = a.exchange(2, memory_order_acq_rel); cout << "old: " << old << endl; cout << "new: " << a.load() << endl; return 0; }

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

"old: 1" "new: 2"

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

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