如何在 Rust 中的多个线程之间共享结构的不可变引用?

Rav*_*abu 5 concurrency unsafe immutability shared-memory rust

我有一个结构,我想在多个线程之间作为不可变引用共享。我正在使用“Arc”来做到这一点,但为了让 Arc 工作,我必须为我的结构实现发送和同步特征。问题就在这里,Rust Book 中写到“手动实现发送和同步是不安全的”。

解决这个问题的办法是什么?

是否有其他方法可以在多个线程之间共享不可变引用?

Jmb*_*Jmb 0

Send并且Sync在安全的情况下由编译器自动实现。两份文件均指出:

当编译器确定该特征合适时,它会自动实现。

注释包含有关类型 或 的更多详细信息SendSync大多数类型Send除外:

主要例外情况包括:

  • 原始指针既不是Send也不是Sync(因为它们没有安全防护)。
  • UnsafeCell不是Sync(因此Cell也不RefCell是)。
  • Rc不是Sendor Sync(因为引用计数是共享的且不同步)。

另外,所有仅包含Send字段的类型也是自动的Send。因此,您所需要的只是让您的自定义结构仅包含Send字段,并且应该没问题。