Deprecation of _writeBarrier()
Deprecation of _writeBarrier()
我最近升级了Visual Studio(2019(的版本,我正在研究并重新编译由以前的开发人员编写的相当旧的代码库。我在编译过程中遇到以下问题:
C3861:"_WriteBarrier":找不到标识符
这源自以下代码块:
inline void SetValueWithRelease(volatile unsigned int* p, int newval)
{ *p = newval; _WriteBarrier(); }
我对_writebarrier的理解非常有限,但我相信该内在的目的是确保在多线程环境中,编译器不会试图"聪明"地优化代码,最终允许其他线程无意中使用未实例化的 p 版本。
但是至于克服这个弃用问题,从我所读到的内容来看,我最好的选择是使用 atomic_thread_fence: https://learn.microsoft.com/en-us/cpp/standard-library/atomic-functions?view=vs-2019#atomic_thread_fence
假设这是正确的,我倾向于在此函数中使用"memory_order_seq_cst"内存顺序选项,但我不确定。
我将不胜感激任何输入或方向以明确解释。
理想情况下,您可以从带有volatile
的手动卷制原子转换为使用带有p->store(newval, std::memory_order_release);
的atomic<int> *p
否则,就volatile
和原子线程围栏之间的交互而言,您将受到编译器的摆布。
我想atomic_thread_fence(std::memory_order_release)
应该在现有的编译器上正常工作,以将易失性的手动滚动放松存储变成发布存储。
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ Usage of AsyncCallback
- 错误:"Left of getValue must have class/struct/union"
- Centos7 g++ "to_string is not in a member of std"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 传递 std::vector of std::shared_ptr,而不是更新对象
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- Declaration of IntRect SFML