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_fence
和std::atomic<T>
在 C++ 中定义 标准库参考。对于硬件访问,使用 /volatile:iso 编译器选项以及volatile
(C++) 关键字。
按照指示,然后我跳转到atomic_thread_fence
documentation,它声明该函数是在标题<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::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allo