Biblioteca Atômica C ++ - buscar adicionar

Descrição

Ele adiciona automaticamente o argumento atomicamente ao valor armazenado no objeto atômico e obtém o valor mantido anteriormente.

Declaração

A seguir está a declaração para std :: atomic :: fetch_add.

T fetch_add (T val, memory_order sync = memory_order_seq_cst) volatile noexcept;

C ++ 11

T fetch_add (T val, memory_order sync = memory_order_seq_cst) noexcept;

A seguir está a declaração para std :: atomic :: fetch_add (membro apenas de atomic especialização de modelo).

T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) volatile noexcept;

C ++ 11

T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) noexcept;

Parâmetros

  • arg - É usado para colocar o outro argumento de adição aritmética.

  • order - É usado para impor a ordem de memória para o valor.

Valor de retorno

Ele retorna o valor imediatamente anterior aos efeitos desta função na ordem de modificação * this.

Exceções

No-noexcept - esta função de membro nunca lança exceções.

Exemplo

No exemplo abaixo para std :: atomic :: fetch_add.

#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 << "Ans:" << data << '\n';
}

O exemplo de saída deve ser assim -

Ans:5