【发布时间】:2011-10-17 12:59:13
【问题描述】:
我有这个 c++ 代码(VS 2008):
LONGLONG res = InterlockedIncrement64(&m_longlong);
沿着它运行,我希望能够从同一个变量中读取
LONGLONG res = InterlockedWHAT?64(&m_longlong)
由于这是一个 64 位变量,简单的读取不被认为是线程安全的,但我找不到正确的 InterlockedXXX。
我应该如何读取这个变量?
【问题讨论】:
-
在 64 位架构上,对齐的 64 位读取(QWORD)应该是原子的,IIRC。查看 tr1/boost/c++0x atomic
以获得“无压力”便携式解决方案 -
谢谢,但我现在不想链接到一个全新的库。寻找 InterlockedXXX 解决方案
-
评论的想法不是答案 :) 我只是提供想法。如果您知道拱门,您可能只需确保对齐并完成。这个问题受到了限制,这就是为什么这不是一个答案。
-
@sehe:您不能只读取对齐的
QWORD。为了使并发安全,您需要两件事,原子性和写/读顺序。即使 64 位 cpu 会以原子方式读取值,优化器或 CPU 也可能会以意想不到的方式干扰读取。
标签: c++ multithreading