Libreria atomica C ++: recupera e aggiungi
Descrizione
Aggiunge automaticamente in modo atomico l'argomento al valore memorizzato nell'oggetto atomico e ottiene il valore mantenuto in precedenza.
Dichiarazione
Di seguito è riportata la dichiarazione per 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;
Di seguito è riportata la dichiarazione per std :: atomic :: fetch_add (membro solo di 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;
Parametri
arg - Si usa mettere l'altro argomento dell'addizione aritmetica.
order - Viene utilizzato per rafforzare l'ordine di memoria per il valore.
Valore di ritorno
Restituisce il valore immediatamente precedente agli effetti di questa funzione nell'ordine di modifica di * this.
Eccezioni
No-noexcept - questa funzione membro non genera mai eccezioni.
Esempio
Nell'esempio seguente per 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';
}
L'output di esempio dovrebbe essere così:
Ans:5