- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于C生产者和消费者线程同步研究
基于C生产者和消费者线程同步研究
摘要:生产者与消费者是多线程应用中一个必须解决的问题,它涉及到了线程之间的通讯的顺畅。通过对C#中多种线程方法的研究,有效地完成了它们之间的同步运行。
关键词:生产者和消费者;C#;线程同步
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)35-2163-02
Study on Producer and Consumer Multi-threaded Synchronism Based on C#
JIANG Shan-shan, QUAN Lei
(Information Engineering School, East China Institute of Technology, Fuzhou 344000, China)
Abstract: Producers and consumers is a multi-threaded applications that must be addressed, it relates to the communications issues between threads . A variety of methods of research on C# simultaneous threads solves the problem of synchronization between them in an effective way.
Key words: producers and consumers; C#; thread synchronization
1 引言
引入线程的目的是为了支持多线程程序设计,即在一个程序中创建了多个线程。在多线程的程序中,当多个线程并发执行时,虽然各个线程中语句的执行顺序是确定的,但线程的相对执行顺序是不确定的,在多个线程需要共享。共享存储结构时这种执行顺序的不确定性可能会产生执行结果的不确定性,甚至可能造成程序出现错误。本文主要讨论如何控制互相交互的线程之间的运行进度,使线程执行时不出现错误结果,即线程间的同步。
2 线程同步
合理地同步一个程序是最精细的软件开发任务之一。在深入到细节之前,应该首先确认使用同步是否不可避免。应该意识到,对程序中资源的访问进行同步时,其难点来自于是使用细粒度锁还是粗粒度锁这个两难的选择。如果采用粗粒度的同步方式,虽然可以简化代码,但也会把自己暴露在争用瓶颈的问题上。因此在开始谈论有关同步机制之前,有必要先了解一下竞态条件和死锁。
2.1 竞态条件
竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执行动作,从而导致意想不到的结果。举例,线程T修改资源R后,释放了它对R的写访问权,之后又重新夺回R的读访问权再使用它,并以为它的状态仍然保持在它释放它之后的状态。但是在写访问权释放后到重新夺回读访问权的这段时间间隔中,可能另一个线程已经修改了R的状态。
2.2 死锁
死锁指的是由于两个或多个执行单元之间相互等待对方结束而引起阻塞的情况。例如:
1) 一个线程T1获得了对资源R1的访问权。2) 一个线程T2获得了对资源R2的访问权。3) T1请求对R2的访问权但是由于此权力被T2所占而不得不等待。4) T2请求对R1的访问权但是由于此权力被T1所占而不得不等待。 T1和T2将永远维持等待状态,此时我们陷入了死锁的处境,针对此问题主要有三种解决方案:
1) 在同一时刻不允许一个线程访问多个资源。2) 为所有访问资源的请求系统地定义一个最大等待时间(超时时间),并妥善处理请求失败的情况。几乎所有的.NET的同步机制都提供了这个功能。 前两种技术效率更高但是也更加难于实现。事实上,它们都需要很强的约束,而这点随着应用程序的演变将越来越难以维护。大的项目通常使用第三种方法。
3线程同步主要实现方法
3.1 用lock语句实现互斥
Lock语句的形式如下:lock(e){访问共享资源的代码} ,这对{}内部的代码就是要锁定的代码(即临界区)
1) 其中e表示要锁定的对象,锁定该对象内所有临界区,必须是引用类型,一般为this。
2) Lock语句将访问共享资源的代码标记为临界区。临界区的意义是:假设线程1正在执行e对象的(某一个)临界区中的代码时,如其他线程也要求执行这个e对象的任何临界区中代码,将被阻塞,一直到线程1退出临界区。
3) 一个对象e临界区可以具有多个。把访问共享资源的代码放在临界区中。
4) 当某个线程(比如线程1执行的代码)进入到某个对
您可能关注的文档
最近下载
- 北京市2019年中考英语真题(含答案).pdf VIP
- 2022年新高考政治真题试卷(山东卷).pdf VIP
- 2025年最新详版征信报告个人信用报告样板模板word格式新版可编辑.docx VIP
- 辽宁省大连市甘井子区2024-2025学年上学期七年级 月考英语试卷(10月份).docx VIP
- 水土保持监督管理培训课件.pptx VIP
- 《现代汉语》各章练习题答案汇总 .pdf VIP
- 输变电工程环境保护和水土保持全过程管控培训课件.pptx VIP
- 生产建设项目水土保持方案管理办法培训课件.pptx VIP
- 培训课件_1411dxs小天鹅纯臻2.0新品1411DXS系列.pdf VIP
- 2022年内蒙古农业大学硕士研究生入学考试公共管理专业综合基础考研真题.pdf VIP
文档评论(0)