C和VisualBasic线程同步编程方法.docVIP

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

C# 和 Visual Basic 线程同步2013-4-23 使用多线程的初衷:充分利用处理器时间隙,实现快速流水线操作。对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应。 对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力。 否则,在完全满足前一个请求之前,将无法处理每个新请求。线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。 否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。 结果将产生不可预知的数据损坏。多线程应用程序中同步资源访问的功能和类说明 Running 线程已启动,它未被阻塞,并且没有挂起的 ThreadAbortException。 StopRequested 正在请求线程停止。 这仅用于内部。 SuspendRequested 正在请求线程挂起。 Background 线程正作为后台线程执行(相对于前台线程而言)。 此状态可以通过设置 Thread.IsBackground 属性来控制。 Unstarted 尚未对线程调用 Thread.Start 方法。 Stopped 线程已停止。 WaitSleepJoin 线程已被阻止。 这可能是因为:调用 Thread.Sleep 或 Thread.Join、请求锁定(例如通过调用 Monitor.Enter 或 Monitor.Wait)或等待线程同步对象(例如 ManualResetEvent)。 Suspended 线程已挂起。 AbortRequested 已对线程调用了 Thread.Abort 方法,但线程尚未收到尝试终止它的挂起的 System.Threading.ThreadAbortException。 Aborted 线程状态包括 AbortRequested 并且该线程现在已死,但其状态尚未更改为 Stopped 创建新的 Thread 对象时,将创建新的托管线程。 Thread 类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数:该委托包装调用 Start 方法时由新线程调用的方法。 多次调用 Start 将引发 ThreadStateException。 当 Start 方法返回时,线程处于 Running 状态。 它已准备就绪,可以计划执行,但可能尚未开始执行。 调用 Thread.Sleep 方法会导致当前线程立即阻止,阻止时间的长度等于传递给 Thread.Sleep 的毫秒数,这样,就会将其时间片中剩余的部分让与另一个线程。 一个线程不能针对另一个线程调用 Thread.Sleep。 调用 Thread.Sleep 及 Timeout.Infinite 将使线程休眠,直到被调用 Thread.Interrupt 的另一个线程中断,或被 Thread.Abort 终止。 通过对被阻止的线程调用 Thread.Interrupt 来引发 ThreadInterruptedException,可以中断正在等待的线程,从而使该线程脱离造成阻止的调用。 线程应该捕获 ThreadInterruptedException 并执行任何适当的操作以继续运行。 如果线程忽略该异常,则运行时将捕获该异常并停止该线程。 Abort 方法用于永久地停止托管线程。 调用 Abort 时,公共语言运行时在目标线程中引发 ThreadAbortException,目标线程可捕捉此异常。一旦线程被中止,它将无法重新启动。 Abort 方法不直接导致线程中止,因为目标线程可捕捉 ThreadAbortException 并在 finally 块中执行任意数量的代码。 如果需要等待线程结束,则可调用 Thread.Join。 Thread.Join 是一个阻塞调用,在线程实际停止执行之前或在可选的超时间隔结束之前,它不会返回。 中止的线程可调用 ResetAbort 方法,也可在 finally 块中执行无限处理,因此,如果不指定超时,则不能保证等待会结束。 等待对 Thread.Join 方法的调用的线程可由其他线程调用 Thread.Interrupt 来中断。 线程是根据其优先级而调度执行的。 即使线程正在运行时中执行,所有线程都是由操作系统分配处理器时间片的。 用于确定线程执行顺序的调度算法的详细情况随每个操作系统的不同而不同。 在某些操作系统下,具有最高优先级(相对于可执行线程而言)的线程经过调度后总是首先运行。 如果具有相同优先级的多个线程都可用,则计划程序将遍历处于该优先级的线程,并为每个线程提供一个固定的时间片来执行。 只要具有较高优先级的

文档评论(0)

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

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

1亿VIP精品文档

相关文档