使用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