游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Rust学习笔记(五十)共享状态的并发及用Sync和Send

  第四十九篇我们学习了在多线程中使用通信来实现并发,这一篇学习使用共享内存的方式实现并发。Rust支持通过共享状态来实现并发。Channel类似单所有权:一旦值的所有权转移至Channel,就无法使用它了。而共享内存并发类似于多所有权:多个线程可以同时访问同一块内存。使用Mutex来每次只允许一个线程来访问数据
  Mutex是mutualexclusion(互斥锁)的缩写。在同一时刻,Mutex只允许一个线程来访问某些数据。想要访问数据:线程必须首先获得互斥锁(lock),lock数据结构是mutex的一部分,它能跟踪谁对数据拥有独占访问权mutex通常被描述为:通过锁定系统来保护它所持有的数据Mutex的两条规则在使用数据之前,必须尝试获取锁(lock)使用完mutex所保护的数据,必须对数据进行解锁,以便于其它线程可以获取锁Mutex的API
  通过Mutex::new(数据)来创建Mutex,Mutex是一个智能指针。访问数据前,通过lock方法来获得锁:这个方法会阻塞当前线程lock可能会失败返回的是MutexGuard(智能指针,实现了Deref和Drop)
  例:usestd::sync::{Mutex,MutexGuard};fnmain(){letmMutex::new(5);{letmutnum:MutexGuardi32m。lock()。unwrap();num6;由于MutexGuard实现了Deref,所以可以使用解引用}由于MutexGuard实现了Drop,所以离开作用域会被释放,这样就不用手动释放锁了。println!(m{:?},m)}多线程共享Mutex
  例:usestd::{sync::{Mutex},thread};fnmain(){letcounterMutex::new(0);letmuthandlesvec!〔〕;forin0。。10{lethandlethread::spawn(move{letmutnumcounter。lock()。unwrap();num1;});handles。push(handle)}forhandleinhandles{handle。join();}println!(Result{},counter。lock()。unwrap())}
  运行以上代码会报错,因为在第一个循环中,第一次进入循环时创建了线程,并把counter的所有权移动至闭包内了,那么剩下的循环就无法获得所有权了。多线程的多重所有权,使用Arc来进行原子引用计数
  之前学过Rc可以使数据被多重引用,但是它只能在单线程下使用。Arc和Rc类似,它可以用于并发场景。A:atomic原子的。那么为什么所有的基础类型都不是原子的,为什么标准库类型不默认使用Arc。因为需要牺牲性能作为代价。Arc和Rc的API是相同的。
  例:usestd::{sync::{Arc,Mutex},thread,};fnmain(){letcounterArc::new(Mutex::new(0));letmuthandlesvec!〔〕;forin0。。10{letcounterArc::clone(counter);lethandlethread::spawn(move{letmutnumcounter。lock()。unwrap();num1;});handles。push(handle)}forhandleinhandles{handle。join()。unwrap();}println!(Result{},counter。lock()。unwrap())}
  运行代码输出10。RefCellRcvsMutexArch1
  Mutex提供内部可变性,和Cell家族(比如RefCell)一样。我们使用RefCell来改变Rc里面的内容;同样使用Mutex来改变Arc里面的内容。注意:Mutex有死锁风险。Send和Synctrait
  Rust语言的并发特性比较少,目前学的并发特性都来自标准库(而不是语言本身)。所以我们无需局限于标准库的并发,可以自己实现并发。但在Rust语言中有两个并发的概念:td::marker::Sync和std::marker::Send这两个trait。Send允许线程间转移所有权
  实现Sendtrait的类型可以在线程间转移所有权。Rust中几乎所有类型都实现了Send,但是Rc没有实现,所以它只能用于单线程。任何完全由实现了Send的类型组成的类型也被标记为Send。除了原始指针之外,几乎所有基础类型都实现了Send。Sync允许从多线程访问
  实现了Sync的类型可以安全的被多个线程引用。也就是说,如果T是Sync,那么T就是Send,即引用可以被安全的送往另一个线程。基础类型都是Sync,完全由Sync类型组成的类型也是Sync,但Rc不是Sync的;RefCell和Cell家族也不是Sync的。不过Mutex是Sync的。
  通常并不需要手动实现Send和Synctrait,因为由Send和Sync的类型组成的类型,自动就是Send和Sync的。因为他们是标记trait,甚至都不需要实现任何方法。他们只是用来加强并发相关的不可变性的。
  手动实现这些标记trait涉及到编写不安全的Rust代码,需要十分以及特别的小心。

东京奥运会即将闭幕,综合体验下来,我发现这款手机最适合看比赛8月8日19点,2020东京奥运会将正式举办闭幕式,虽然开幕式不尽如人意,但是闭幕式还是值得关注,这一届的奥运会给我们带来了各种惊喜。首先,最令人瞩目的无疑是耀眼的成绩,在今年……获顶级投资机构青睐!恒大汽车实力凸显视频加载中。。。恒大汽车在本届上海国际车展上大放异彩,成为本届车展人气王,不仅吸引了千家媒体争相报道,还收获了数百家国内外顶级投资机构的青睐。4月20日至22日,嘉……券商晨会精华指数震荡整理能源转型和价值股修复奏响主旋律财联社11月2日讯,昨日市场,沪指、创业板收跌,中证1000指数涨近1。新能源车产业链持续拉升,板块内约30股涨停或涨幅超10;光伏、风电、储能等板块仍表现活跃,但个股分化明显……华为P50无5G,4G可用5G不行,期待翻身华为P50Pro搭载6。6120Hz柔性OLED曲面屏,P50为6。5寸90Hz屏幕,拥有300Hz触控采样率,支持10。7亿色。机身漂亮高端商务,奈何4G,似乎再退步,但是也……千万日产车主相约云家宴1本是后山人,偶做前堂客。一次闯入东风日产云家宴的围观,让网友在惊讶于内容丰富的家宴同时,被一封封充溢着浓浓幸福感的家书所感动。来自东风日产车主的满屏弹幕,刷新了不辞长作……怎么在小程序做本地生活服务?生活服务类小程序怎么做?大家在日常生活中有没有见过预约线下生活服务类的微信小程序?也就是,在人们的生活范围领域内,提供便利的生活服务,可以线上预约,简单方便又实用,比如包车服务、洗衣服务、代驾服务、全……如何制作H5页面?新手教程分享相信大家在微信朋友圈都有浏览或使用过H5微传单页面吧,比如婚礼邀请函、大型会议展会活动邀请函、商家节日促销、招聘广告、培训招生等。由于H5页面极易传播,宣传推广效果好很多商家企……幸福有礼,呼伦贝尔秦ProEV直降0。5万元刚刚小编在车友圈看到好多朋友都在讨论秦ProEV最高优惠0。5万元,这么诱人的降价幅度,想要购车的朋友们不考虑一下趁机拿下?比亚迪王朝呼伦贝尔益丰祥泰店,活动时间10月29日1……日常用中文写代码系列Ruby脚本将mov文件转换为gif因为需要将之前苹果系统下用QuickTime录屏生成的文件(mov格式)转换成gif文件,便于传到某些博客平台,于是找到了一个转换工具,将命名中文化并简化。Ruby和视频转换都……在同一个领域里,小米和华为不单是竞争者,他们也是互补者在同一个领域里面,所有的厂家基本都属于竞争对手。在现在的社会里没有竞争就没有对比也就没有进步。只有大家相互的发现对方的缺点,并且取长补短,这样才能够日渐的提升自己,完善自己。像……高盛集团美元将重演数年来最疲软走势高盛集团(GoldmanSachs)预计,美元将会再次重演近年最疲软的走势,而摩根士丹利则认为美元指数会向上。高盛指出,逆差是其看跌美元的关键,该行分析师ZachPand……这个小区里有好多漂亮的美人,引得不少摄影爱好者前来拍摄在边城黑河的农发行住宅小区里,长了好多虞美人花。从进入7月开始,花儿就到了盛开期,红艳艳的美人吸引了不少摄影爱好者,他们在每天早上花儿着光的那一段时间来到小区进行拍摄。实……
请回答1988结局到底好吗,请回答1988可能是哪年拍的搞笑剧《请回答1988》给安排把1988年汉城的奥运会做为背景,所带来首尔市道峰区双门洞居住的五户人家之间温暖的亲情和邻里情,直到最后结局发展特别好,而剧情在2015年进行拍摄……界读丨小鹏发布全球首款智能机器马,面向小朋友的大玩具欧界报道:近日,小鹏汽车发布了首款智能机器马的第三代原型机,内部代号称为小白龙,或许,过去在我们看来让孩子骑着机器马上学、让机器人帮你取快递、和你聊天。。。。。。都是无稽……等到年底比特币暴跌的时候,会不会踊跃出更多人坚定的相信比特币一直说是骗局的肯定是没有买币的人,如果是币圈的就不会认定是骗局。因为确实有人在币圈这种新兴的投机市场中赚到钱,而且是超过传统市场的收益率。既然赚到钱那肯定是不会把它当骗局……好看的美剧排行榜豆瓣高评分美剧经典20部美剧好看的美剧2019让你过足瘾。很多人都喜欢看美剧,美剧不仅情节吸引人,还可以帮助大家学习英语。那么,好看的高评分美剧有哪些?经典美剧又有哪些?下面高评分好看的美剧排行榜、高评分……超隐蔽助听器是否适合所有听损人群佩戴?超隐蔽助听器,对听力损失的情况和耳道情况是有要求的,全面检查听力后根据听力情况来选配,适合自己的才是最好的。超隐蔽助听器适合比较轻的人士佩戴,如果听力损失比较严重,超隐形……余生请多指教片花曝光余生请多指教主要讲述了什么近日,芒果tv官微公布了剧集名单,其中电视剧《余生请多指教》也在名单之上,同时也曝光了《余生请多指教》的片花,片花中,肖战和杨紫两人互表情愫,甜齁众人。余生请多指教主要讲述了什……为什么越来越多的人放弃了微信朋友圈?微信朋友圈指的是腾讯微信上的一个社交功能,于微信4。0版本2012年4月19日更新时上线。自那时起,微信除了基本的即时聊天功能,增加了社交内容分享板块,有点儿类似于早前的……破局大结局什么意思,破局王千源演的是什么人犯罪片《破局》给带来刑警高见翔在参加母亲葬礼的路上意外撞死一名通缉犯,之后他都陷入阴谋深陷迷局中,不过他后期寻找其中的钥匙和失踪的钱,后期要观看王千源演的陈昌民角色给剧情不断推……三妹剧情介绍大结局里大庆和谁在一起农村剧《三妹》的背景安排为20世纪70年代在揭西凤凰山下的凤凰小镇产生事情,其中有民办老师何三妹为教育事业所付出的青春年华和苦难不幸抗争的事情,最后她跟李大在一起过上美好的生活……818来电好物季,20003000手机推荐给你realmeGTneo闪速版82562099元GTneo闪速版是我买过最超值的手机。搭载天玑1200LPDDR4xUFS3。1平台,性能上在这个价位已经是顶格了,内置45……MIUI12。5增强版好评一片,雷军终于放心了可能谁也没有想到以MIUI成名的小米,却在2021年小河里翻船,MIUI却成了小米拖后腿似的存在。面对这个问题小米没有逃避而是积极地与用户进行沟通,面对面地解决存在的问题。于是……腾讯弹出提醒,QQ帐号需要绑定手机号才能继续使用IT之家8月16日消息近期,不少用户发现,在登录腾讯TIM等QQ软件时,腾讯会提醒,根据国家法规,QQ帐号需要绑定手机号才能继续使用。请登录最新版手机QQ并前往设置手机号码进行……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网