《语言docs》规定:
&mut T
是Send
当且仅当T
是Send
谁能提供一个代码示例,说明这实际上是相关的?
thread::spawn
要求它的闭包borrow 'static
的生存期,因此只有静态机可以通过线程闭包borrow ,但Safe Rust不允许static mut
.因此,无论如何都不可能在&mut
之前捕获线程闭包中的任何内容.
在哪个用例中,&mut
‘S Send
能力可以是相关的?
《语言docs》规定:
&mut T
是Send
当且仅当T
是Send
谁能提供一个代码示例,说明这实际上是相关的?
thread::spawn
要求它的闭包borrow 'static
的生存期,因此只有静态机可以通过线程闭包borrow ,但Safe Rust不允许static mut
.因此,无论如何都不可能在&mut
之前捕获线程闭包中的任何内容.
在哪个用例中,&mut
‘S Send
能力可以是相关的?
&mut T
原则上应该是Send
(如果T
是Send
);不应该仅仅因为您不能为它构建安全的用例(unsafe
仍然存在是有原因的)而忽视实现.
但也有一些安全的使用 case :
std::thread::scope
提供了一种在允许访问局部变量的同时在其他线程中执行代码的方法.在链接的文档中,&mut i32
在另一个线程中使用,因此需要Send
.
使用&'static mut T
不是unsafe
,static mut
也不是创建&'static mut T
的唯一方法.例如,使用Box::leak
可以安全地完成这项工作.这显然可以发送到另一个线程.
async
个任务可能希望成为Send
,同时在.await
个点上保持内部可变引用,因此需要&mut T
来实现Send
.在编写async
个函数时,无论您是否意识到这一点,这都是微不足道的.