Rust: Send, Sync

SendSycn 是Rust安全并发的重中之重,但是实际上它们是只是标记特征(marker trait, 该特征末定义任何行为,因此非常适合用于标记),来看看它们的作用:

  • 实现Send的类型可以在线程间安全的传递其所有权
  • 实现Sync的类型可以在线程间安全的共享(通过引用)

 

这里还有一个潜在的依赖:一个类型要在线程间安全的共享的前提是,指向它的引用必须能在线程间传递。因为如果引用都不能被传递,我们就无法在多个线程间使用引用去访问同一个数据了。

 

一个类型T实现了Sync,那么&T就会实现Send,也就是:

impl<T: Sync + ?Sized> Send for &T {}

但是需要注意的是,&T和&mut T是两种不同的类型:

// 不存在的
impl <T: Sync + Sized?> Send for &mut T {}

相应的,只有实现了Send的类型T,才会有&mut T实现Send,即:

unsafe impl<T: Send + ?Sized> Send for &mut T {}

  

学习入口

posted @ 2022-08-23 11:01  johnny_zhao  阅读(201)  评论(0编辑  收藏  举报