std::_Atomic_thread_fence (大写A)这是正确的吗?

Posted

技术标签:

【中文标题】std::_Atomic_thread_fence (大写A)这是正确的吗?【英文标题】:std::_Atomic_thread_fence (with capital A) is this correct? 【发布时间】:2015-05-04 20:16:17 【问题描述】:

Visual Studio 2012 c++ 文档指出 _ReadBarrier_WriteBarrier 内在函数现在是 deprecated:

_ReadBarrier_WriteBarrier_ReadWriteBarrier 编译器 内在函数和 MemoryBarrier 宏都已弃用,应该 不被使用。对于线程间通信,使用诸如 atomic_thread_fencestd::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:确实有效。这似乎是一个智能感知混乱。如果您将您的评论作为答案发布,我将很乐意接受。也谢谢。 【参考方案1】:

这似乎只是 Visual Studio 智能感知的问题。如果您将其更正为 atomic_thread_fence,它应该可以正常工作。

【讨论】:

以上是关于std::_Atomic_thread_fence (大写A)这是正确的吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在已经使用 seq_cst CAS 的无锁队列中需要 atomic_thread_fence(memory_order_seq_cst)?

原子线程围栏:为什么在这个非原子变量上存在数据竞争?这有关系吗?

Ubuntu16.04编译Android5.0报了这样的错,请问怎么解决

编辑: std::vector<std::__cxx11::basic_string<char> >' 到 'std::__cxx11::string' aka 'std::_

std::cout 不打印我想要的? [复制]

未定义模板的隐式实例化“std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allo