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

Concurrency 如何在Rust中的多个线程之间共享结构的不可变引用?,concurrency,rust,immutability,shared-memory,unsafe,Concurrency,Rust,Immutability,Shared Memory,Unsafe,我有一个结构,我想作为多个线程之间的不可变引用共享它。 我使用“Arc”来实现这一点,但为了让Arc工作,我必须为我的结构实现发送和同步特性。 这就是问题所在,铁锈书中写道,手动实现发送和同步是不安全的 解决这个问题的办法是什么 有没有其他方法可以在多个线程之间共享一个不可变引用?并且在安全的情况下由编译器自动实现。两份文件均说明: 当编译器确定此特性是适当的时,它会自动实现 包含有关类型发送或同步的更多详细信息,但大多数类型都是发送,除了: 主要例外情况包括: 原始指针既不是Send也不是S

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

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

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

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

当编译器确定此特性是适当的时,它会自动实现

包含有关类型
发送
同步
的更多详细信息,但大多数类型都是
发送
,除了:

主要例外情况包括:

  • 原始指针既不是
    Send
    也不是
    Sync
    (因为它们没有安全防护装置)
  • unsafectell
    不是
    Sync
    (因此
    Cell
    RefCell
    不是)
  • Rc
    不是
    Send
    Sync
    (因为refcount是共享和不同步的)
另外,所有只包含
Send
字段的类型也会自动
Send
。因此,您只需要自定义结构只包含
Send
字段,就可以了