024 Rust死灵书之Send和Sync
介绍
本系列录制的视频主要放在B站上Rust死灵书学习视频
Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source
Send和Sync
当同一块内存有多个别名,同时还可以改变内存的值的时候,它们就不是线程安全的。
Rust中根据Send和Sync trait获取相关的信息:
1、如果一个类型可以安全地传递给另一个线程,那么这个类型是实现了Send这个trait了的;
2、如果一个类型可以安全地被多个线程共享,那么这个类型就是Sync的。
Send和Sync是Rust并发机制的基础,但是它们是非安全的trait。Send和Sync是标志trait(即没有任何关联方法),类型要实现它们其实就是满足它们需要的内部特征。不正确的实现Send和Sync会导致未定义行为。
Send和Sync是自动推到的trait,规则:
1、如果一个类型完全由Send或者Sync组成,那么这个类型本身也是Send或者Sync的;
2、几乎所有的基本类型都是Send和Sync的。
例外情况:
1、裸指针不是Send的,也不是Sync的;
2、UnsafeCell不是Sync的(Cell和RefCell也不是);
3、Rc不是Send或Sync的(引用计数是共享且非同步的)。
Rc和UnsafeCell是典型的非线程安全的,因为它们允许非同步地共享可变状态。
不能自动推导的类型也可以很容易的实现Send和Sync:
struct MyBox(*mut u8);unsafe impl Send for MyBox {}
unsafe impl Sync for MyBox {}
还有一个比较少见的场景,一个类型被自动推导为Send或者Sync,但它其实不满足二者的要求,此时我们可以为其去掉Send和Sync的实现,方式如下:
#![feature(negative_impls)]// I have some magic semantics for some synchronization primitive!
struct SpecialThreadToken(u8);impl !Send for SpecialThreadToken {}
impl !Sync for SpecialThreadToken {}
这里需要注意的是,一种类型自己不可能被不正确的推导为Send和Sync,只有类型和其它非安全代码一起实现一些特殊行为时,才可能成为一个不正确的Send或者Sync。
024 Rust死灵书之Send和Sync相关推荐
- 026 Rust死灵书之实现Vec
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 从 ...
- 023 Rust死灵书之并发、竞争
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 并 ...
- 016 Rust死灵书之安全方式内存初始化
本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 介绍 所 ...
- 020 Rust死灵书之展开
本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source Rust ...
- 025 Rust死灵书之原子操作
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 原 ...
- 019 Rust死灵书之资源管理
本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 基于所有 ...
- 008 Rust死灵书之生命周期
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust相关的源码资料在:https://github.com/anonymousGiga 笔记内容 今天我们跟大家聊一聊生命周期. 命周期 ...
- 027 Rust死灵书之Vec内存分配
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source V ...
- 035 Rust死灵书之Vec处理零尺寸类型
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 详 ...
最新文章
- Centos下部署Solr 搜索引擎
- java Opencv 图片修复 Photo
- module 'torch.jit' has no attribute 'unused'
- Markdwon中多张图片的并排显示(Mardown的灵动使用技巧)
- SOT-143封装 ESD二极管
- FilterDispatcher is deprecated!
- 安卓软件错误log_关于android程序的log错误信息的问题,请明白人看下吧,我是初学者,新建的android项目,一个代码都没改过...
- 低代码开发平台有哪些?
- java生僻字_Android上显示生僻字的方法
- EasyUI:form表单提交前验证
- HtmlDocument.ExecCommand() 方法
- 人工智能导论--基于神经网络的模式识别实验
- google之Thumbnails图片等比压缩,保持图片清晰
- 智商黑洞(门萨Mensa测试)11
- bzoj3208 花神的秒题计划Ⅰ
- John Ripper的模式和配置
- 网易web安全工程师进阶网易web安全微专业从基础到进阶
- 为什么说朋友不多的人才是真正厉害的人呢?
- 还没学会微服务?这份最全微服务总结送给你
- 计算机科学考研题目,计算机专业考研模拟试题7.docx
热门文章
- <<算法很美>>——(三)十大排序算法(下)
- Windows10输入法繁体简体切换
- matlab如何看线性趋势线,matlab自动画趋势线指标公式
- 服务器操作系统巡检维护,服务器操作系统巡检内容
- 【慕课网】Web学习笔记———CSS3 (一)
- android 仿qq好友动态,Android UI仿QQ好友列表分组悬浮效果
- 【Linux】一些命令
- 列举3种强制类型转换和2种隐式类型转换?
- 练习《learn Python3 the hard way》(Zed Shaw)ex25无法导入模块
- 基于 PaddleDetection 的 SoccerNet 多目标跟踪基线