【问题标题】:Natural alignment + volatile = atomic in C++11?自然对齐+易失性= C++ 11中的原子?
【发布时间】:2018-11-01 06:02:36
【问题描述】:

1) 以下是自然对齐指针的声明:

alignas(sizeof(void *)) volatile void * p;

相当于

std::atomic<void *> 

在 C++11 中?

2) 更准确地说,假设这种类型的指针将与 C++11 中的 std::atomic 以相同的方式工作是否正确?

【问题讨论】:

标签: c++11 atomic volatile stdatomic


【解决方案1】:

不,volatile 不保证该位置会被原子地写入或读取,只是编译器无法优化多次读取和写入。

在某些架构上,如果正确对齐,处理器将自动读取或写入,但这不是通用的,甚至不能通过处理器系列来保证。在可能的情况下,atomic 的内部实现将利用架构特性和 atomic 指令修饰符,那么为什么使用 atomic,如果您指的是 atomic?

【讨论】:

  • C++/CX 中 Microsoft 特定的引用类型不能使用 std::atomic 编译,并且它们没有自己的加载/存储原语。我在这里问过他们:stackoverflow.com/questions/50349510/….
  • 啊,这是一个稍微不同的问题。我并不真正详细了解 M/S C# 实现,但对于 c++ 智能指针,它不仅仅是一个简单的指针,因此可能永远不适合处理器的基本简单类型。如果您不能依赖 atomic,那么您可能必须将其包装在互斥体中。
  • 是的,std::mutex 是我的朋友。
猜你喜欢
  • 2012-10-04
  • 2012-02-22
  • 1970-01-01
  • 2013-11-13
  • 2016-04-04
  • 2016-06-10
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多