我有这个c ++代码(VS 2008):
LONGLONG res = InterlockedIncrement64(&m_longlong);
沿着它运行,我希望能够从同一个变量中读取
LONGLONG res = InterlockedWHAT?64(&m_longlong)
由于这是一个64位变量,因此简单读取不被视为线程安全,但我找不到正确的InterlockedXXX。
我该如何阅读这个变量?
答案 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位变量的简单读取和写入是原子的。