fork download
  1. #include <iostream>
  2. #include <atomic>
  3. #include <cstdint>
  4.  
  5. int main()
  6. {
  7. std::atomic<uint64_t> array[2];
  8. std::atomic<int> pos;
  9.  
  10. array[0] = ATOMIC_VAR_INIT(0);
  11. array[1] = ATOMIC_VAR_INIT(0);
  12. pos = ATOMIC_VAR_INIT(0);
  13.  
  14. //normal increment
  15. array[pos]++;
  16. pos++;
  17.  
  18. //atomic increment
  19. int fetchReturnArray = std::atomic_fetch_add(&array[pos], (uint64_t)1);
  20. int fetchReturnPos = std::atomic_fetch_add(&pos, 1);
  21.  
  22. std::cout << "Array[0] = " <<array[0] <<std::endl;
  23. std::cout << "fetchReturnArray = " <<fetchReturnArray <<std::endl;
  24. std::cout << "Array[1] = " <<array[1] <<std::endl;
  25.  
  26. std::cout << "fetchReturnPos = " << fetchReturnPos <<std::endl;
  27. std::cout << "Pos = " << pos;
  28. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
Array[0]         = 1
fetchReturnArray = 0
Array[1]         = 1
fetchReturnPos   = 1
Pos              = 2