gpt4 book ai didi

multithreading - 如何跨线程共享盒装特征类型的堆分配向量

转载 作者:行者123 更新时间:2023-11-29 08:17:58 25 4
gpt4 key购买 nike

<分区>

所以我当前的用例是我需要:

  1. 创建 Vec<Box<Material>>其中 Material 是一个特征。
  2. 将 impl Material 的盒装结构推送到此 Vec 中。
  3. 将此 vec 的只读版本共享给多个线程。

我目前的方法是为 Vec<..> 使用 Arc 指针,然后为每个线程克隆它。

例如:

let mut materials: Vec<Box<Material>> = Vec::new();
// ... push stuff into materials
let materials = Arc::new(materials);
let mat_cloned = materials.clone();
// pool is a threadpool
pool.execute(move|| {
// do read stuff with mat_cloned.
}

但是我得到编译器错误:dyn 'materials::Material' cannot be shared between threads safely

我的理解是:

  1. Materials 是指向各种 Material 实现的盒装指针的堆分配向量。

  2. 然后我用 Arc 类型包装,它是一个原子引用计数的只读指针。

  3. 我应该能够安全地与线程共享这个指针吗?

material::Material 无法安全地共享,但为什么不使用指向它的 Arc 指针呢?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com