互锁读取64位变量

时间:2011-10-17 12:59:13

标签: c++ multithreading

我有这个c ++代码(VS 2008):

LONGLONG res = InterlockedIncrement64(&m_longlong);

沿着它运行,我希望能够从同一个变量中读取

LONGLONG res = InterlockedWHAT?64(&m_longlong)

由于这是一个64位变量,因此简单读取不被视为线程安全,但我找不到正确的InterlockedXXX。

我该如何阅读这个变量?

3 个答案:

答案 0 :(得分:6)

LONGLONG res = InterlockedCompareExchange64(&m_longlong, 0, 0);

答案 1 :(得分:3)

您可以使用InterlockedOr64并将零作为第二个参数传递。据我所知,这并不需要Vista,大概是因为它是用编译器内在函数实现的。

答案 2 :(得分:2)

LONGLONG res = InterlockedOr64(&m_longlong, 0);

如果您的程序仅在64位上运行,则只需读取该值即可。 MSDN states that

  

对64位正确对齐的64位变量的简单读取和写入是原子的。