JMC*_*JMC 5 multithreading thread-safety rust
语言文档指出:
&mut T是Send当且仅当T是Send
有人可以提供一个代码示例来说明这实际上是相关的吗?
thread::spawn要求其闭包在生命周期内借用'static,因此线程闭包只能借用静态变量,但安全 Rust 不允许static mut。因此,无论如何都不应该捕获线程闭包中的任何内容&mut。
&muta的能力在哪些用例中Send具有相关性?
A原则上&mut T应该是(如果是);不应仅仅因为无法为其构建安全用例而忽略该实现(由于某种原因仍然存在)。SendTSendunsafe
但有一些安全的用例:
std::thread::scope提供了一种在其他线程中执行代码同时允许访问局部变量的方法。在链接文档中, a&mut i32在另一个线程中使用,因此需要Send.
它不是unsafe使用 a&'static mut T也不static mut是创建 a 的唯一方法。Box::leak可以通过使用例如来安全地完成。这显然应该可以发送到另一个线程。
async任务可能希望Send同时保持跨点的内部可变引用.await,因此需要&mut T实现Send. 无论您在编写函数时是否意识到,这始终是一件微不足道的事情async。