Пространства имён
Варианты
Действия

std::atomic::fetch_add

Материал из cppreference.com
< cpp‎ | atomic‎ | atomic
 
 
 
std::atomic
Функции-члены
atomic::atomic
atomic::operator=
atomic::is_lock_free
atomic::store
atomic::load
atomic::operator T
atomic::exchange
atomic::compare_exchange
Специализированные функции-члены
Оригинал:
Specialized member functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
atomic::fetch_add
atomic::fetch_sub
atomic::fetch_and
atomic::fetch_or
atomic::fetch_xor
atomic::operator++
atomic::operator++(int)
atomic::operator--
atomic::operator--(int)
atomic::operator+=
atomic::operator-=
atomic::operator&=
atomic::operator|=
atomic::operator^=
 
T fetch_add( T arg,

             std::memory_order order = std::memory_order_seq_cst );
T fetch_add( T arg,

             std::memory_order order = std::memory_order_seq_cst ) volatile;
(Только для специализации шаблона atomic<Integral>)
(начиная с C++11)
T* fetch_add( std::ptrdiff_t arg,

              std::memory_order order = std::memory_order_seq_cst );
T* fetch_add( std::ptrdiff_t arg,

              std::memory_order order = std::memory_order_seq_cst ) volatile;
(Только для специализации шаблона atomic<T*>)
(начиная с C++11)

Атомарно заменяет текущее значение результатом арифметического сложения значения и arg. Операция атомарного изменения (read-modify-write). Обращения к памяти происходят в соответствии со значением order.

Для знаковых интегральных (Integral) типов используется арифметика дополнительного кода. Результат всегда определен. Для типов T* результат может быть неопределенным адресом, но сама операция не приводит к неопределенному поведению.

Содержание

[править] Параметры

arg - Второе слагаемое арифметического сложения
memory_order - Ограничения порядка доступа к памяти

[править] Возвращаемое значение

Значение атомарной переменной до вызова.

[править] Исключения

спецификация noexcept:  
noexcept
  

[править] Пример

#include <iostream>
#include <thread>
#include <atomic>
 
std::atomic<long long> data;
void do_work()
{
    data.fetch_add(1, std::memory_order_relaxed);
}
 
int main()
{
    std::thread th1(do_work);
    std::thread th2(do_work);
    std::thread th3(do_work);
    std::thread th4(do_work);
    std::thread th5(do_work);
 
    th1.join();
    th2.join();
    th3.join();
    th4.join();
    th5.join();
 
    std::cout << "Result:" << data << '\n';
}

Вывод:

Result:5

[править] См. также

добавляет не-атомарное значение к атомарному объекту и возвращает предыдущее значение этого объекта.
(шаблон функции) [править]