上机练习2深入学习多线程编程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上机练习2深入学习多线程编程

C#网络编程 【周 序】:第4周 【实验名称】:熟悉C#多线程编程方法 【实验目标】:掌握C#线程创建及启动方法; 掌握合理共享线程资源的方法; 掌握C#多线程程序的开发技巧 【实验环境】:WindowsXP,VS2010 【实验内容】: 一、思考题: 在结合上周实验内容,请深入学习并思考如下问题(1~3为复习思考题,4~10为预习思考题): 线程如何创建?C#如何控制多线程之间的优先级顺序? 线程创建方式:Thread thread = new Thread (new threadStart(method));//创建线程 Thread.Start();//启动线程 C#多线程优先级:thread1.Priority = ThreadPriority.Highest; 如何获取当前线程的执行状态?挂起线程与终止线程的区别是什么? C#如何使用多线程访问窗体上的控件? checkforIllegalCrossThreadCalls = false; 什么是线程同步?为什么需要使用线程同步? 实现线程同步的方法有几种? Volatile关键字 volatile是最简单的一种同步方法,当然简单是要付出代价的。它只能在变量一级做同步,volatile的含义就 是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。因此,当多线程同时访问该变量时,都将直接 操作主存,从本质上做到了变量共享。 lock关键字 lock是一种比较好用的简单的线程同步方式,它是通过为给定对象获取互斥锁来实现同步的。它可以保证当一个 线程在关键代码段的时候,另一个线程不会进来,它只能等待,等到那个线程对象被释放,也就是说线程出了临 界区。 System.Threading.Interlocked 对于整数数据类型的简单操作,可以用 Interlocked 类的成员来实现线程同步,存在于 System.Threading 命名空 间。Interlocked类有以下方法:Increment , Decrement , Exchange 和 CompareExchange 。使用 Increment 和 Decrement 可以保证对一个整数的加减为一个原子操作。Exchange 方法自动交换指定变量的值 Monitor Monitor 类提供了与 lock类似的功能,不过与 lock 不同的是,它能更好的控制同步块,当调用了 Monitor 的 Enter(Object o)方法时,会获取 o的独占权,直到调用 Exit(Object o)方法时,才会释放对 o的独占权,可以多次调用 Enter(Object o)方法,只需要调用同样次数的 Exit(Object o)方法即可,Monitor 类同时提供了 TryEnter(Object o,[int]) 的一个重载方法,该方法尝试获取 o对象的独占权,当获取独占权失败时,将返回 false。但使用 lock 通常比直接使 用 Monitor 更可取,一方面是因为 lock 更简洁,另一方面是因为 lock 确保了即使受保护的代码引发异常,也 可以释放基础监视器。这是通过 finally 中调用 Exit 来实现的。事实上,lock 就是用 Monitor 类来实现的。 Mutex 在使用上,Mutex 与上述的 Monitor 比较接近,不过 Mutex 不具备 Wait,Pulse,PulseAll 的功能,因此,我们 不能使用 Mutex 实现类似的唤醒的功能。不过 Mutex 有一个比较大的特点,Mutex 是跨进程的,因此我们可以在 同一台机器甚至远程的机器上的多个进程上使用同一个互斥体。尽管Mutex 也可以实现进程内的线程同步,而且 功能也更强大,但这种情况下,还是推荐使用 Monitor,因为 Mutex 类是 win32 封装的,所以它所需要的互操作 转换更耗资源。 ReaderWriterLock 在考虑资源访问的时候,惯性上我们会对资源实施lock机制,但是在某些情况下,我们仅仅需要读取资源的数据, 而不是修改资源的数据,在这种情况下获取资源的独占权无疑会影响运行效率,因此.Net 提供了一种机制,使用 ReaderWriterLock进行资源访问时,如果在某一时刻资源并没有获取写的独占权,那么可以获得多个读的访问权,单 个写入的独占权,如果某一时刻已经获取了写入的独占权,那么其它读取的访问权必须进行等待。 SynchronizationAttribute 当我们确定某个类的实例在同一时刻只能被一个线程访问时,我们可以直接将类标识成 Synchronization的, 这样,CLR 会自动对这个类实施同步机制,实际上,这里面涉及到同步域的概念

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档