【发布时间】:2015-05-04 20:16:17
【问题描述】:
Visual Studio 2012 c++ 文档指出 _ReadBarrier 和 _WriteBarrier 内在函数现在是 deprecated:
_ReadBarrier、_WriteBarrier和_ReadWriteBarrier编译器 内在函数和 MemoryBarrier 宏都已弃用,应该 不被使用。对于线程间通信,使用诸如atomic_thread_fence和std::atomic<T>在 C++ 中定义 标准库参考。对于硬件访问,使用 /volatile:iso 编译器选项以及volatile(C++) 关键字。
按照指示,然后我跳转到atomic_thread_fencedocumentation,它声明该函数是在标题<atomic> 上定义的。
如果我在我的解决方案中包含这样的标题,我找不到该函数,但我确实找到了std::_Atomic_thread_fence。
命名表明这是 Microsoft 特定的实现。这是文档问题还是我应该修改默认的 #include 搜索路径?
【问题讨论】:
-
嗯,有趣,我绝对可以在我的 VS2012 上的
<atomic>中看到atomic_thread_fence。_Atomic_thread_fence在<xatomic.h>中。 -
使用 vs 2013,这也发生在我身上,但是当我手动将其更正为
atomic_thread_fence时,它工作正常。 -
@T.C: 你说的完全正确,我没有注意到如果我跳转到“打开定义”,实际打开的文件是
<xatomic.h>,它实际上包含在<atomic>中-谢谢! -
@Phantom:确实有效。这似乎是一个智能感知混乱。如果您将您的评论作为答案发布,我将很乐意接受。也谢谢。
标签: c++ visual-studio-2012 visual-c++