Próbując zrobić unikalną funkcję generowania id i podszedł z tym:przyrost atomowa i wrócimy licznik
std::atomic<int> id{0};
int create_id() {
id++;
return id.load();
}
Ale sądzę, że to możliwe, że funkcja zwraca taką samą wartość dwukrotnie, prawda? Na przykład wątek A wywołuje funkcję, zwiększa wartość, ale następnie zatrzymuje się, gdy wątek B wchodzi, a także zwiększa wartość, ostatecznie A i B zwracają tę samą wartość.
Więc za pomocą muteksy funkcja może wyglądać następująco:
std::mutex mx;
int id = 0;
int create_id() {
std::lock_guard<std::mutex> lock{mx};
return id++;
}
Moje pytanie: Czy jest możliwe aby utworzyć zachowanie tarła unikalne wartości int z użyciem licznika tylko ATOMiCS? Powodem, dla którego pytam, jest to, że muszę odradzać wiele identyfikatorów, ale czytam, że muteks jest powolny.