为了更好地理解Send和Sync特征,有以下类型的例子:
Send,不实施Sync.Sync,不实施Send.该Arc<T>文件说:
impl<T> Sync for Arc<T> where T: Send + Sync + ?Sized
impl<T> Send for Arc<T> where T: Send + Sync + ?Sized
Run Code Online (Sandbox Code Playgroud)
一个Arc允许多个线程同时访问底层T经由一个不可变的参考&T.只要T不能以非同步方式修改,这是安全的&T.对于具有" 继承可变性 "(几乎所有类型)的所有类型都是如此,对于具有不同步的" 内部可变性 "(例如RefCell,......)的类型则是如此.
据我了解,Send此处不需要绑定.举例来说,我觉得分享我的一个实现人工型Sync,但不是Send在一个Arc很安全.
最后,&T本身也没有这个约束!在对文档Send和Sync我们发现:
impl<'a, T> Send for &'a T where T: Sync + ?Sized
impl<'a, T> Sync for &'a T where …Run Code Online (Sandbox Code Playgroud)