Bibliothèque atomique C ++ - fetch add

La description

Il ajoute automatiquement l'argument de manière atomique à la valeur stockée dans l'objet atomique et obtient la valeur détenue précédemment.

Déclaration

Voici la déclaration pour 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;

Voici la déclaration pour std :: atomic :: fetch_add (membre uniquement de atomic spécialisation des modèles).

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;

Paramètres

  • arg - Il est utilisé pour mettre l'autre argument d'addition arithmétique.

  • order - Il est utilisé pour appliquer l'ordre de mémoire pour la valeur.

Valeur de retour

Il renvoie la valeur précédant immédiatement les effets de cette fonction dans l'ordre de modification de * this.

Des exceptions

No-noexcept - cette fonction membre ne lève jamais d'exceptions.

Exemple

Dans l'exemple ci-dessous pour 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'exemple de sortie devrait être comme ceci -

Ans:5