<分区>
我有一个结构,我想将其作为不可变引用在多个线程之间共享。 我正在使用“Arc”来执行此操作,但要使 Arc 正常工作,我必须为我的结构实现发送和同步特征。 问题来了,Rust Book 中写到手动实现发送和同步是不安全的。
解决这个问题的方法是什么?
是否有其他方法可以在多个线程之间共享不可变引用?
<分区>
我有一个结构,我想将其作为不可变引用在多个线程之间共享。 我正在使用“Arc”来执行此操作,但要使 Arc 正常工作,我必须为我的结构实现发送和同步特征。 问题来了,Rust Book 中写到手动实现发送和同步是不安全的。
解决这个问题的方法是什么?
是否有其他方法可以在多个线程之间共享不可变引用?
最佳答案
Send
和 Sync
在安全的情况下由编译器自动实现。两份文件都指出:
This trait is automatically implemented when the compiler determines it's appropriate.
nomicon包含更多有关Send
或Sync
类型的详细信息,但大多数类型都是Send
,除了:
Major exceptions include:
- raw pointers are neither
Send
norSync
(because they have no safety guards).UnsafeCell
isn'tSync
(and thereforeCell
andRefCell
aren't).Rc
isn'tSend
orSync
(because the refcount is shared and unsynchronized).
此外,所有仅包含Send
字段的类型也自动Send
。因此,您所需要的只是让您的自定义结构仅包含 Send
字段,您应该没问题。
关于concurrency - 如何在 Rust 中的多个线程之间共享结构的不可变引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57721159/