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

标签 concurrency rust immutability shared-memory unsafe

<分区>

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

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

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

最佳答案

SendSync在安全的情况下由编译器自动实现。两份文件都指出:

This trait is automatically implemented when the compiler determines it's appropriate.

nomicon包含更多有关SendSync 类型的详细信息,但大多数类型都是Send,除了:

Major exceptions include:

  • raw pointers are neither Send nor Sync (because they have no safety guards).
  • UnsafeCell isn't Sync (and therefore Cell and RefCell aren't).
  • Rc isn't Send or Sync (because the refcount is shared and unsynchronized).

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

关于concurrency - 如何在 Rust 中的多个线程之间共享结构的不可变引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57721159/

相关文章:

garbage-collection - 在 D 中制作结构的堆副本

go - 限制运行的并发任务数

c++ - Linux 中的并发系统调用

c# - 如何使用 CancellationToken 属性?

java - 可调整大小的 Java BlockingQueue

rust - 如何直接将有限字节从读取器复制到写入器

c - 为 C/FFI 库调用分配对象

sqlite - 如何在 Cargo.toml 中静态链接 sqlite3

.net - 不可变对象(immutable对象)的线程安全性如何?

全路径算法中的 Python 和列表可变性