- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java和Rust在实现多线程编程时的异同
这个题目是希望程序员能够用生产者和消费者这样的模式来解决匹配的问题。在我的Java和
Rust 的实现里,都是分为这么几个对象:dancetype,leader,follower,invitation。其中leader
就相当于生产者,follow就相当于消费者,invitation就是中间传递的消息。整个程序的思路就是:
leader通过发送invitation给follower,folower根据自己匹配的情况返回结果给leader,接受或
者拒绝。
Java 的实现
打开Follower.java里的这个函数
这里的 Follower.this.invitations 就是我们的消息队列,定义是: private
LinkedListInvitation invitations;LinkedList不是线性安全的集合,需要我们加同步。具体的
同步方法就是函数里写的,通过Java常见的用wait,notify和notifyall给对象加锁。
处理并发有 wait 、notify 和 notiyall ,有兴趣的朋友可以去这里了解一下:
/16453.html。Follower就是一个等待leader发送invitation,处理并
返回结果的过程。
Leader.java
这么一段代码:
里面就是Leader发送邀请inv,并等待follower返回结果的大概逻辑,通过对消息体加锁,是
Java传统的实现多线程并发的方式。还有消费者的消息队列也会加锁,在Java里,有个对象叫
LinkedBlockingQueue,是不用加锁就可以put 和 take 的,但在例子里,我们选用了更简单的
LinkedList,也是为了表现一下加锁的逻辑。
Rust 的实现
Leader 的结构为:
Follower的结构为:
对于其他语言转过来的同学,这里的Vec,i32,bool都很好理解,不过里面出现的Arc和Mutex,
Sender,Receiver就是新东西了,上面这4个都是Rust标准库的东西,也是这次分享要介绍的重点
对象,是这4个东西共同实现了消息的生产,传递和消费。
下面简单介绍一下分别是做什么用的:
ArcT实现了sync接口。Sync接口是做什么呢?权威资料是这么说的:当一个类型T实现了
Sync,它向编译器表明这个类型在多线程并发时没有导致内存不安全的可能性。
如果看不懂不要紧,我们先看看实际中是怎么用的:
在这个例子里,我们关注这几句:
let data = Arc::new(Mutex::new(vec![1u32, 2, 3]));
let data = data.clone();
let mut data = data.lock().unwrap();
下面分别解释一下是做什么的:
简单的说Arc::new表明了这是通过clone()方法来使用的,每clone,都会给该对象原子计数+1,
通过引用计数的方法来保证对象只要还被其中任何一个线程引用就不会被释放掉,从而保证了前面说
的:这个类型在多线程并发时没有导致内存不安全的可能性。
如果我们不定义为Arc就传到其他线程使用,编译器会报:
error: capture of moved value: `data`
data[i] += 1;
我们可以记住clone()就是Arc 的用法。
接下来我们看Mutex:
Mutex实现了send接口。同样,在权威资料里是这么描述的:这个类型的所有权可以在线程间
安全的转移
那我们又是怎么用Mutex 的呢?就是用lock().unwrap()。lock()的作用是获取对象,如果当前
有其他线程正在使用MutexT里面的T对象时,本线程就会阻塞,从而保证同时只有一个线程来访
问对象,mutex也另外提供了try_lock()的方法,是不阻塞的,只要其他线程被占用,就返回err,
通常Arc和Mutex都是一起使用的。
回到我最原
您可能关注的文档
- 5S管理—第三部分.pdf
- 5S培训教程(入门).pdf
- 5万立方米粉煤灰加气混凝土砌块项目可行性研究报告.pdf
- 8、预租及租金收入.pdf
- 9月南宁楼市预告.pdf
- 12会计法与审计法.pdf
- 2007年苏州市场竞争分析报告.pdf
- 2007年中级会计实务讲义.pdf
- 2008年中级经济师人力资源管理专业知识与实务讲义第四章 战略性人力资源管理.pdf
- 2008中级人力资源管理专业知识与实务练习试题第三章 组织设计与组织文化.pdf
- 门式膺架法吊装施工工艺工法.pdf
- 筑岛围堰施工工艺工法.pdf
- 外研新版七年级下册《Module 7 My past life Unit 1 I was born in a small village.》同步练习卷3.doc
- 外研新版七年级下册《Module 5 Shopping Unit 2 You can buy everything on the Internet.》同步练习卷3.doc
- 外研新版七年级下册《Module 5 Shopping Unit 1 What can I do for you?》同步练习卷2.doc
- 外研新版七年级下册《Module 6 Around town Unit 1 Could you tell me how to get to the National Stadium?》同步练习卷1.doc
- 外研新版七年级下册《Module 6 Around town Unit 2 The London Eye is on your right.》同步练习卷1.doc
- 人教版2024七年级上册英语Unit 2(知识梳理).docx
- 人教版2024七年级上册英语Unit 3 Section B(1a-1d)(同步课件).pptx
- 部编版八年级下册《第12课 《诗经》二首》同步练习卷(1).doc
最近下载
- 往复炉排的运行调节及注意事项.pdf VIP
- 沪教牛津版英语2024七年级上册全册知识清单(记忆版).docx
- 洛隆车站特大桥桩基全护筒施工工艺总结报告.docx VIP
- 中石化炼油厂用泵的特殊要求及发展趋势.pdf
- 世纪商务英语外贸函电 第四版 项目1 Basic Knowledge of Business English Letters Writing.ppt
- 不锈钢管安装施工方案.doc
- 国家装修标准:JCT 2113-2012 普通装饰用铝蜂窝复合板.pdf VIP
- 医院隔离技术标准2023.pptx VIP
- 强制性条文内容(土建部分).doc
- 新能源汽车发展研究毕业论文5000字.docx VIP
文档评论(0)