使用:: InterlockedIncrement(VC ++)的唯一ID

时间:2011-07-26 09:40:21

标签: c++ multithreading increment

使用VC ++来获取一个向上计数的唯一ID,我想知道这在多线程应用程序中是否合法?

uint32_t GetNewId() { return ::InterlockedIncrement(&lastId); }

基本上,我想知道InterlockedIncrement是否只保护增量,或者返回值是否也能防止竞争条件?

3 个答案:

答案 0 :(得分:4)

是的,这是合法的 - 由

组成的访问权限
  • 读,然后
  • 增量,然后
  • 写,然后
  • 将递增的值返回给调用者

将是原子的。只是不要忘记它是32位并且可以溢出。

答案 1 :(得分:1)

答案 2 :(得分:0)

检查的最佳方法是转到source

  

对于其他互锁的调用,此函数原子   功能