当我很少需要可变数据时,如何在多个线程之间共享数据?

swi*_*ard 3 rust

T我有一些既不实现也不实现的Copy数据类型Clone

  1. 如果我想在多个线程之间不可变地共享数据,我将使用Arc<T>.
  2. 如果我想可变地共享它,我会使用Arc<Mutex<T>>.

如果我想先可变地共享它,然后在循环中不变地共享它怎么办?所以:

  • 我不能使用Arc<T>or ,Arc<Mutex<Arc<T>>>因为我无法改变“可变”线程中的数据。
  • 我可以使用Arc<Mutex<T>>,但随后我必须lock()在每个“不可变”线程中使用它才能达到T,从而失去并行性。
  • 突变完成后我无法复制数据,因为它很昂贵(或者没有办法实现Clone)。

那么什么是正确有效的解决方案呢?

swi*_*ard 5

Astd::sync::RwLock就是我正在寻找的,谢谢@Shepmaster!