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
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