【发布时间】:2020-04-13 03:14:57
【问题描述】:
我正试图围绕Send + Sync 特征。我得到了Sync 背后的直觉——这是传统的线程安全(就像在C++ 中一样)。该对象执行必要的锁定(如果需要,内部可变性),因此线程可以安全地访问它。
但Send 部分有点不清楚。我理解为什么像 Rc 这样的东西只是 Send - 对象可以被赋予不同的线程,但非原子操作使其线程不安全。
Send背后的直觉是什么?是否意味着对象可以被复制/移动到另一个线程上下文中,并在复制/移动后继续有效?“
Sync但没有Send”的任何示例场景都会有帮助。还请指出这种情况下的任何 rust 库(我发现了几个相反的)
对于 (2),我发现一些线程使用带有指向堆栈/线程本地存储上的数据的指针的结构作为示例。但无论如何这些都是不安全的(同步或其他)。
【问题讨论】:
-
Sync但不是Send没有意义。如果一个对象可以在线程之间同步,那么根据定义,它也可以从一个线程发送到另一个线程。
标签: rust