- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可以使用WaitHandleWaitOne方法请求互斥体的所属权
10.2.4 Monitor类同步数据访问数 当多线程公用一个对象时,也会出现和公用代码类似的问题,这种问题就不应该使用lock关键字了,这里需要用到System.Threading中的一个类Monitor,我们可以称之为监视器,Monitor提供了使线程共享资源的方案。 C# Monitor类可以锁定对象,一个线程只有得到这把锁才可以对该对象进行操作。对象锁机制保证了在可能引起混乱的情况下一个时刻只有一个线程可以访问这个对象。 成员名称 说明 Enter 在指定对象上获取排他锁 Exit 释放指定对象上的排他锁。 Pulse 通知等待队列中的线程锁定对象状态的更改。 PulseAll 通知所有的等待线程对象状态的更改。 TryEnter 试图获取指定对象的排他锁。 Wait 释放对象上的锁并阻止当前线程,直到它重新获取该锁。 第 10 章齐头并进完成任务——多线程操作 多线程和多线程的实现 线程间数据同步 带参数的线程 线程池 10.3 带参数的线程 .Net让我们很轻松就可以创建一个线程,但是它提供的创建线程和启动线程的方法没有明显的提供参数,假如我们要用线程来启动类里面一个带参数的方法该怎么办?在多线程或单线程任务中,让线程带传入参数一直是个麻烦的问题,我们将介绍C#中带参数线程处理方法。 10.3.1 带参数线程处理函数 在不传递参数情况下,使用ThreadStart代理来连接执行函数,如果希望传递参数给执行函数,则使用ParameterizedThreadStart代理来链接执行函数,使用Thread类提供给我们四个重载的构造函数: Thread (ThreadStart):初始化 Thread 类的新实例。 Thread (ParameterizedThreadStart):初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。 Thread (ParameterizedThreadStart, Int32):初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。 Thread (ThreadStart, Int32):初始化 Thread 类的新实例,指定线程的最大堆栈大小。 10.3.2 使用带参数线程 在处理的时候,如果不带参数的线程用ThreadStart,如果带一个参数的时候我们用ParameterizedThreadStart。带多个参数的用另外的方法。 下面我们看一下具体的情况: 1. 不带参数的情况下,使用下面的示例程序就可以完成一个最简单线程程序: 2. 带一个参数的 由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法MethodsOne形参类型必须为object。 3. 带多个参数的 由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。 4. 利用结构体给参数传值。 为多线程方法调用提供多个参数的最好办法是将目标方法包裹在结构中,这种方法的优点是,无论需要传递任何参数,都可以在结构内方便的完成封装和传递。 第 10 章齐头并进完成任务——多线程操作 多线程和多线程的实现 线程间数据同步 带参数的线程 线程池 10.4 线程池 “线程池”是可以用来在后台执行多个任务的线程集合。这使主线程可以自由地异步执行其他任务。线程池通常用于服务器应用程序。每个传入请求都将分配给线程池中的一个线程,因此可以异步处理请求,而不会占用主线程,也不会延迟后续请求的处理。 一旦池中的某个线程完成任务,它将返回到等待线程队列中,等待被再次使用。这种重用使应用程序可以避免为每个任务创建新线程的开销。线程池通常具有最大线程数限制。如果所有线程都繁忙,则额外的任务将放入队列中,直到有线程可用时才能够得到处理。可以实现自己的线程池,但是通过 ThreadPool 类使用 .NET Framework 提供的线程池更容易一些。 ThreadPool 类提供一个线程池,该线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器,其主要成员如下: 成员名称 说明 QueueUserWorkItem 将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。 RegisterWaitForSingleObject 注册正在等待 WaitHandle 的委托。 QueueUserWorkItem(WaitCallback) 将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。 QueueUserWorkItem(WaitCallback, Obj
您可能关注的文档
- 企业形象策划导入的阶段.PPT
- 企业员工操作-汇工作.PPT
- 优良品质追求卓越华燕电器13736731592品牌墙壁开关生产.DOC
- 任何导入的模型都必须简化为FLOTHERM软件中DrawingBoard可.PPT
- 任务四茶类的认识与服务.PPT
- 低成就资优生的美丽与哀愁-立人国中.PPT
- 位于东南亚中南半岛的柬埔寨西北方暹粒.PPT
- 会计的目标和作用-西安培华学院教务处.PPT
- 佑安医院固定资产分类调整交流.PPT
- 低频噪音防制实例王伟辉.PDF
- 原电池电动势的测定实验报告.pdf
- 与业主、设计、总包、监理和他承包人的配合措施.pdf
- 公司管理流程.pptx
- 2024_2025学年新教材高中地理第1章地球的运动素养综合训练新人教版选择性必修1.doc
- 2024_2025学年新教材高中地理第3章大气的运动第1节常见天气系统第1课时锋与天气分层作业新人教版选择性必修1.doc
- 2024_2025学年新教材高中地理第1章地球的运动第2节地球运动的地理意义第4课时正午太阳高度的变化四季更替和五带划分分层作业课件新人教版选择性必修1.pptx
- 2024_2025学年新教材高中地理第2章地表形态的塑造第2节构造地貌的形成第1课时地质构造与地貌课件新人教版选择性必修1.pptx
- 2024_2025学年新教材高中地理第1章地球的运动问题研究人类是否需要人造月亮课件新人教版选择性必修1.pptx
- 五片小雪花课件.pdf
- 2024_2025学年新教材高中地理第3章大气的运动第2节气压带和风带第1课时气压带和风带的形成分层作业课件新人教版选择性必修1.pptx
文档评论(0)