C++11 中的自然对齐 + volatile = atomic?
Natural alignment + volatile = atomic in C++11?
1) 下面是自然对齐指针的声明:
alignas(sizeof(void *)) volatile void * p;
相当于
std::atomic<void *>
在 C++11 中?
2) 更准确地说,假设这种类型的指针将以与 C++11 中的 std::atomic 相同的方式工作是否正确?
不,volatile 不保证该位置将以原子方式写入或读取,只是编译器无法优化多次读取和写入。
在某些架构上,如果对齐正确,处理器将自动读取或写入,但这不是通用的,甚至不能通过处理器系列来保证。在可能的情况下,atomic 的内部实现将利用架构特性和 atomic 指令修饰符,所以为什么 not 使用 atomic,如果你的意思是 atomic ?
1) 下面是自然对齐指针的声明:
alignas(sizeof(void *)) volatile void * p;
相当于
std::atomic<void *>
在 C++11 中?
2) 更准确地说,假设这种类型的指针将以与 C++11 中的 std::atomic 相同的方式工作是否正确?
不,volatile 不保证该位置将以原子方式写入或读取,只是编译器无法优化多次读取和写入。
在某些架构上,如果对齐正确,处理器将自动读取或写入,但这不是通用的,甚至不能通过处理器系列来保证。在可能的情况下,atomic 的内部实现将利用架构特性和 atomic 指令修饰符,所以为什么 not 使用 atomic,如果你的意思是 atomic ?