前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习Rust,了解内存和线程安全问题

学习Rust,了解内存和线程安全问题

原创
作者头像
非凸科技ft.tech
发布2022-04-06 18:13:52
3970
发布2022-04-06 18:13:52
举报

Rust编程语言旨在确保内存安全,它混合使用编译时静态检查和运行时锁来阻止程序访问无效指针或在没有适当同步的情况下跨线程共享内存。Rust的实现方式通常理解是引入了可变的借用和不可变的引用、生命周期等。

1.独一无二的访问。如果一个变量对一个值有唯一访问权,那么对它进行修改是安全的。

2.独一无二的所有权。独一无二的访问的一种形式是所有权。当你用一个值初始化一个变量时,这个变量就成为那个值的唯一所有者。因为值只有一个所有者,所有者可以安全地修改值、销毁值或将值转移给新的所有者。

3.独一无二的借用。如果你对T类型的值有惟一的访问权,则可以使用借用对该值的惟一引用。对类型T的值的唯一引用具有类型&mut T。

4.独一无二的借用不能被复制。一个&mut T类型的值不能被复制或克隆,因为这将导致对相同值有两个唯一性引用,它只能被移动。

5.共享访问。如果一个值同时存在多个可用于来访问它的可用变量,那么这个值就是共享的。

6.共享所有权。Rc<T>将在堆上为类型T的值分配空间,再加上一些额外的空间用于引用计数,然后你可以调用Rc::clone来增加引用计数,并生成另一个指向相同值的Rc<T>。

7.共享借用。由于Rc<T>对它的类型T值没有唯一的访问权,所以它不能生成唯一的&mut T借用(除非在运行时检查引用计数是否等于1,但它实际上不是共享的借用)。但它可以生成类型T的共享引用&T。

8.线程安全。Rust通过标准库内置了两个Trait,用来标记其他线程是否可安全访问的类型:

T: Send 意味着在单个其他线程上访问T是安全的,其中在执行时间线上每一个线程具有一次性的独占访问权。这种类型的值可以通过将独一无二的所有权转移到另一个线程,或者通过独一无二的借用(&mut T)在另一个线程上使用。

T: Sync 意味着多个线程可同时访问T是安全的,每个线程都有共享访问权限。这些类型的值可以通过共享引用(&T)在其他线程上访问<实际上是共享只读而不是写>。

9.共享可修改性。当值不发生改变修改时,共享是安全的,而当值不发生共享时,修改是安全的。但是如果我们想既要共享又要可改变一个值,怎么办呢?Rust标准库为这种共享的可修改性提供了独特的实现机制,即UnsafeCell,它创造性的结合Send、Sync Trait以实现混合静态检查和运行时检查来保证内存安全和线程安全。

非凸科技是Rust量化先行者,追求高效和极致。我们聘请优秀的人,采用先进的技术,建立卓越的团队,成就不平凡的非凸,为量化行业带来效率价值最大化!欢迎加入非凸,为自己拼搏,也成就彼此!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档