Trying to make a unique id generating function, and came up with this:
std::atomic<int> id{0};
int create_id() {
id++;
return id.load();
}
But I assume it's possible for that function to return the same value twice, right? For example, thread A calls the function, increments the value, but then halts while thread B comes in and also increments the value, finally A and B both return the same value.
So using mutexes, the function might look like this:
std::mutex mx;
int id = 0;
int create_id() {
std::lock_guard<std::mutex> lock{mx};
return id++;
}
My question: Is it possible to create the behavior of spawning unique int values from a counter using only atomics? The reason I'm asking is because I need to spawn a lot of id's, but read that mutex is slow.
Simply use:
See http://en.cppreference.com/w/cpp/atomic/atomic/operator_arith