【发布时间】:2025-08-05 03:40:02
【问题描述】:
使动态数组线程安全和并发是什么意思?
例如,std::vector。
- 可能需要在同一位置插入两个线程。无需同步,因为它将根据线程调度完成。
- 一个线程擦除而另一个线程访问相同的元素?我认为这不是数据结构问题,而是使用问题。
那么有什么需要在std::vector 上完成以使其成为线程安全和并发的,还是默认情况下是线程安全和并发的?
【问题讨论】:
-
除非明确说明,否则请考虑 everything 线程不安全,这样您的假设就会在安全方面出错。而且您的两个示例都需要某种同步或互斥,请记住,线程可以随时被抢占。
-
唯一可以在标准容器(
std::vector是其中之一)上可靠地同时执行的操作是 read。一旦您在 中为同一对象引入并发写操作的潜在,*就会开始脱落,除非对象本身支持这种情况下的原子更新,否则*就会离开车辆.如果容器本身要经历任何可能会改变布局的机制,那么车轮已经在你身后四分之一英里处。 -
STL 容器在您的场景中不是线程安全的。您必须使用锁来序列化访问,或者使用线程安全的不同容器
-
@PanagiotisKanavos:链接 boost.org 时,将 URL 中的版本号替换为“release”。这样您的链接就不会过时。
标签: c++ vector data-structures concurrency lock-free