Multithreading 怎么会生锈';什么样的渠道可以实施?

Multithreading 怎么会生锈';什么样的渠道可以实施?,multithreading,rust,Multithreading,Rust,我很好奇在Rust中如何实现发送/接收通道。当然,一些数据必须由两个线程同时访问。否则,线程B如何知道来自线程a的消息何时到达 C++中,两个线程都访问共享队列,当一个添加到队列时,它通知另一个线程正在等待的条件变量。 在锈蚀中,我不能有一个共享对象:我可以移动它,就像它是C++ + UNQuyY-PTR,或者我可以通过它引用它,但是对象被锁定,而另一个线程不能进入它。也可以,但只能具有读取权限?即使是,仍然存在一个问题,它可能在写的中间读取变量。 < P>对于这样的生锈情况,有不安全< /C

我很好奇在Rust中如何实现发送/接收通道。当然,一些数据必须由两个线程同时访问。否则,线程B如何知道来自线程a的消息何时到达

C++中,两个线程都访问共享队列,当一个添加到队列时,它通知另一个线程正在等待的条件变量。


在锈蚀中,我不能有一个共享对象:我可以移动它,就像它是C++ + UNQuyY-PTR,或者我可以通过它引用它,但是对象被锁定,而另一个线程不能进入它。也可以,但只能具有读取权限?即使是,仍然存在一个问题,它可能在写的中间读取变量。

< P>对于这样的生锈情况,有<代码>不安全< /COD>代码块,原始C<代码> *MUT < /Cord>指针,和<代码> unSaveCels< /Cord>包装器类型。这些是用于创建更高级别(和安全的)抽象的低级构造块


UnsafeCell
通知编译器它所持有的内存将由线程以可变方式共享,并且编译器不会使它以未定义的行为从多个线程中进行变异。然后,代码可以在单元格周围添加一些同步原语,以使其实际上是安全的。这是实现诸如
Atomic
Mutex
和channels等类型的内部结构的关键。

当然,您可以使用类似于
Arc
?@PiRocks的东西,我已经搜索过RwLock。因此,
rblock r
意味着很多线程可以读取,但只能写入一次。但这怎么可能发生在铁锈上呢?如果我将
r
传递给线程
A
,那么线程
B
如何访问它?我只能把它借给thread
A
或者给thread
A
一点提示。在这两种情况下,线程
B
将无法访问
r
@pirock以及为什么需要
Arc
?这里有一个关于它们在源代码中如何工作的相当好的描述:
Arc
,这样您就可以对rblock进行多个“复制”(实际上只是引用同一个锁)。此外,您无法对线程何时退出设置任何约束,因此您需要一个弧来确保没有泄漏。