#include <iostream>
#include <atomic>
#include <cstdint>
int main()
{
std::atomic<uint64_t> array[2];
std::atomic<int> pos;
array[0] = ATOMIC_VAR_INIT(0);
array[1] = ATOMIC_VAR_INIT(0);
pos = ATOMIC_VAR_INIT(0);
//normal increment
array[pos]++;
pos++;
//atomic increment
int fetchReturnArray = std::atomic_fetch_add(&array[pos], (uint64_t)1);
int fetchReturnPos = std::atomic_fetch_add(&pos, 1);
std::cout << "Array[0] = " <<array[0] <<std::endl;
std::cout << "fetchReturnArray = " <<fetchReturnArray <<std::endl;
std::cout << "Array[1] = " <<array[1] <<std::endl;
std::cout << "fetchReturnPos = " << fetchReturnPos <<std::endl;
std::cout << "Pos = " << pos;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXRvbWljPgojaW5jbHVkZSA8Y3N0ZGludD4KCmludCBtYWluKCkKewogICAgc3RkOjphdG9taWM8dWludDY0X3Q+IGFycmF5WzJdOwogICAgc3RkOjphdG9taWM8aW50PiBwb3M7CiAgICAKICAgIGFycmF5WzBdID0gQVRPTUlDX1ZBUl9JTklUKDApOwogICAgYXJyYXlbMV0gPSBBVE9NSUNfVkFSX0lOSVQoMCk7CiAgICBwb3MgICAgICA9IEFUT01JQ19WQVJfSU5JVCgwKTsKICAgIAogICAgLy9ub3JtYWwgaW5jcmVtZW50CiAgICBhcnJheVtwb3NdKys7CiAgICBwb3MrKzsKICAgIAogICAgLy9hdG9taWMgaW5jcmVtZW50CiAgICBpbnQgZmV0Y2hSZXR1cm5BcnJheSA9IHN0ZDo6YXRvbWljX2ZldGNoX2FkZCgmYXJyYXlbcG9zXSwgKHVpbnQ2NF90KTEpOwogICAgaW50IGZldGNoUmV0dXJuUG9zICAgPSBzdGQ6OmF0b21pY19mZXRjaF9hZGQoJnBvcywgMSk7CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiQXJyYXlbMF0gICAgICAgICA9ICIgPDxhcnJheVswXSAgICAgICAgIDw8c3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJmZXRjaFJldHVybkFycmF5ID0gIiA8PGZldGNoUmV0dXJuQXJyYXkgPDxzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIkFycmF5WzFdICAgICAgICAgPSAiIDw8YXJyYXlbMV0gICAgICAgICA8PHN0ZDo6ZW5kbDsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJmZXRjaFJldHVyblBvcyAgID0gIiA8PCBmZXRjaFJldHVyblBvcyA8PHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiUG9zICAgICAgICAgICAgICA9ICIgPDwgcG9zOyAKfQ==