相关疑难解决方法(0)

什么是仅实现Send和Sync之一的类型示例?

为了更好地理解SendSync特征,有以下类型的例子:

  • 实施Send,不实施Sync.
  • 实施Sync,不实施Send.

rust

23
推荐指数
2
解决办法
1536
查看次数

为什么`Arc <T>`要求T同时为'Send`和`Sync`才能成为`Send` /`Sync`?

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本身也没有这个约束!在对文档SendSync我们发现:

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)

thread-safety rust

6
推荐指数
1
解决办法
106
查看次数

标签 统计

rust ×2

thread-safety ×1