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

5
我有一个结构体,我想在多个线程中共享作为不可变引用。我使用“Arc”来实现,但是为了让Arc工作,我必须实现Struct的Send和Sync特质。 问题在于,《Rust Book》中写道,手动实现Send和Sync是不安全的。 那么解决方案是什么? 是否有其他方法可以在多个线程之间共享不可变引用?
1个回答

0

SendSync 会在编译器确定安全时自动实现。两个文档都说明:

当编译器认为适合时,该特征将被自动实现。

nomicon 包含了更多关于类型 SendSync 的细节,但大多数类型都是 Send 的,除了:

主要的例外包括:
- 原始指针既不是 `Send` 也不是 `Sync`(因为它们没有安全保护)。 - `UnsafeCell` 不是 `Sync`(因此 `Cell` 和 `RefCell` 也不是)。 - `Rc` 不是 `Send` 或 `Sync`(因为引用计数是共享的且未同步的)。
此外,所有仅包含 `Send` 字段的类型也自动成为 `Send`。因此,您只需要确保您的自定义结构仅包含 `Send` 字段即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接