转换为char *后写入std :: atomic

kri*_*nan 2 c++ memory-layout reinterpret-cast stdatomic

对不起,如果我的怀疑太幼稚。但我有一个类型转换难度std::atomicchar*类型。是强制转换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类型)。

谢谢 :)

Dan*_*ica 5

我认为这根本不安全。C ++标准不保证std::atomic<uint8_t>是无锁的。如果不是,则可能例如在每个对象的第一个字节开始存储互斥std::atomic<uint8_t>对象成员变量。在这种情况下,您的命令*data |= mask;将操纵此互斥量的一部分,这可能会完全破坏其内部实现。


这可能也是一个相关的问题:是否有可能获取atomic_int的基础存储的地址?

  • @krithikaGopalakrisnan现在更糟了。虽然可以将指向任何类型对象的指针“ reinterpret_cast”转换为“ char *”,但事实并非如此。 (3认同)