指向std::atomic的指针是否具备线程安全性?
请提供需要格式化的具体文本内容,我会按照你指定的Markdown格式规则完成处理。
若你是需要处理之前提及的原子类型相关提问,以下是符合要求的格式化回答:
原子类型指针的线程安全性与原子容器实现
线程安全性问题解答
第二种写法是线程安全的。
原子类型的线程安全核心在于其自身操作的原子性,只要两个线程访问的是同一个std::atomic_int实例(这里指针i指向同一块动态分配的内存,满足前提),那么对*i的赋值和load()操作都是原子操作,不会引发数据竞争。
原子类型vector的实现方案
你提到原子类型不可拷贝构造,想用指针存入vector,这是可行方案,但还有更简洁安全的选择:
- 直接构造原子对象到vector中:利用
emplace_back在容器内直接构造原子对象,无需指针,避免手动管理内存:std::vector<std::atomic_int> vec; vec.emplace_back(0); // 直接在vector内存中构造原子对象 - 使用智能指针替代裸指针:如果坚持用指针,推荐用
std::unique_ptr或std::shared_ptr避免内存泄漏:std::vector<std::unique_ptr<std::atomic_int>> vec; vec.push_back(std::make_unique<std::atomic_int>(0));
注意事项
动态分配原子对象时,必须确保new操作完全完成后,再让其他线程访问该指针,否则会触发未定义行为。
内容的提问来源于stack exchange,提问作者toxic
相关产品推荐
相关产品推荐

