使用VC++,以獲得一個唯一的ID向上計數,我不知道這是否是合法的在多線程應用程序?唯一ID與:: InterlockedIncrement(VC++)
uint32_t GetNewId() { return ::InterlockedIncrement(&lastId); }
基本上,我想知道是否InterlockedIncrement只是保護增量,還是返回值也是防範的競爭條件?
使用VC++,以獲得一個唯一的ID向上計數,我不知道這是否是合法的在多線程應用程序?唯一ID與:: InterlockedIncrement(VC++)
uint32_t GetNewId() { return ::InterlockedIncrement(&lastId); }
基本上,我想知道是否InterlockedIncrement只是保護增量,還是返回值也是防範的競爭條件?
是的,這是合法的 - 它由
將是原子的。只要不要忘記,它是32位,可以溢出。
檢查的最佳方法是轉到source。
此功能原子相對於調用其它互鎖 功能。
函數結果以寄存器和/或堆棧形式返回。每個線程都有獨立的堆棧和寄存器集,所以,這是安全的。 InterlockedIncrement將做它做的事情,它的返回值與其他任何函數結果沒有什麼不同 - 你的函數可以被中斷並從另一個線程重新進入,並且會返回兩者的正確結果。
Rgds, Martin
併爲一些引擎蓋下的解釋。 – Cookie
感謝您的再次確認。 – Cookie