kri*_*nan 2 c++ memory-layout reinterpret-cast stdatomic
对不起,如果我的怀疑太幼稚。但我有一个类型转换难度std::atomic要char*类型。是强制转换std::atomic to char有效吗?
我可以写这样的类型转换变量。我确信当线程试图将变量写入变量时不会有多线程读/写操作(我知道,当该变量没有并发访问时,就不需要使用原子)。
std::atomic<uint8_t>* data_;
char *data = reinterpret_cast<char*>(data_);
*data |= mask;
Run Code Online (Sandbox Code Playgroud)
安全吗?
编辑:我不确定是否值得一提。在我的代码中
char *raw;
// variable raw is allocated
std::atomic<uint8_t>* data_ = reinterpret_cast<std::atomic<uint8_t>*>(raw);
Run Code Online (Sandbox Code Playgroud)
上面是std::atomic< uint8_t>创建方法的方式(作为char和type强制转换为std :: atomic类型)。
谢谢 :)
我认为这根本不安全。C ++标准不保证std::atomic<uint8_t>是无锁的。如果不是,则可能例如在每个对象的第一个字节开始存储互斥std::atomic<uint8_t>对象成员变量。在这种情况下,您的命令*data |= mask;将操纵此互斥量的一部分,这可能会完全破坏其内部实现。
这可能也是一个相关的问题:是否有可能获取atomic_int的基础存储的地址?。