为什么Vec具有特征同步?

时间:2018-09-01 22:00:44

标签: data-structures rust thread-safety

根据documentation,如果Vec<T>实现Sync,则T实现Sync。看来它是由某种魔术自动生成的,但是我觉得这是违反直觉的,因为矢量的幼稚实现不是线程安全的。

Rust中的Vec<T>真的是Sync吗?

1 个答案:

答案 0 :(得分:6)

实现Sync意味着一种类型可以保证在线程之间可以共享对其值的引用,而不会在安全Rust中引起数据争用的风险。

类型&Vec<T>的值是不可变的,因此共享它们总是安全的。 Rust借用检查器已经禁止与该对象的任何其他引用同时存在可变引用,因此,由于Rust的借用规则,该引用会自动工作。共享Vec时,任何事物都无法对其进行突变,因此不可能进行数据竞争。当然,如果图片中出现unsafe代码,那么保证就消失了。

实际上大多数类型是Sync。那些不是(例如RefCell)的引用倾向于具有内部可变性,或者在编译时借阅检查器无法控制的范围内管理引用。