Biblioteca atómica de C ++ - buscar agregar
Descripción
Agrega automáticamente de forma atómica el argumento al valor almacenado en el objeto atómico y obtiene el valor que tenía previamente.
Declaración
A continuación se muestra la declaración de 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 continuación se muestra la declaración para std :: atomic :: fetch_add (solo miembro 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 - Se usa poner el otro argumento de la suma aritmética.
order - Se utiliza para hacer cumplir el orden de memoria para el valor.
Valor devuelto
Devuelve el valor inmediatamente anterior a los efectos de esta función en el orden de modificación de * this.
Excepciones
No-noexcept - esta función miembro nunca arroja excepciones.
Ejemplo
En el siguiente ejemplo 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';
}
La salida de muestra debería ser así:
Ans:5