試圖讓一個唯一的ID生成功能,以及與此想出了:單位遞增,並返回櫃檯
std::atomic<int> id{0};
int create_id() {
id++;
return id.load();
}
但我認爲這是可能該函數返回相同的值的兩倍,對不對?例如,線程A調用該函數,遞增該值,但在線程B進入時暫停並且也遞增該值,最後A和B都返回相同的值。
因此,使用互斥體,函數可能是這樣的:
std::mutex mx;
int id = 0;
int create_id() {
std::lock_guard<std::mutex> lock{mx};
return id++;
}
我的問題:是否可以創建只使用原子公司的反產卵獨特int類型的行爲?我問的原因是因爲我需要產生大量的id,但是讀到互斥量很慢。