C多线程学习手册.docVIP

  1. 1、本文档共55页,可阅读全部内容。
  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多线程学习手册

C#中的线程文章系参考转载,英文原文网址请参考:/threading/ Joseph Albahari,? 翻译:?Swanky Wu 要点: 入门 概述与概念 创建和开始使用多线程 线程同步基础 同步要领 锁和线程安全 Interrupt 和 Abort 线程状态 等待句柄 同步环境 使用多线程 单元模式和Windows Forms BackgroundWorker类 ReaderWriterLock类 线程池 异步委托 计时器 局部储存 高级话题 非阻止同步 Wait和Pulse Suspend和Resume 终止线程 一、入门 1.? 概述与概念 ?C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。这里的一个简单的例子及其输出: ??????? using System; using System.Threading; ? class?ThreadTest { ?? static?void?Main() { ???? Thread t = new?Thread (WriteY); ??? ?t.Start();????????????????????????? // Run WriteY on the new thread ?? ??while?(true) Console.Write (x);?? // Write x forever ?? } ??static?void?WriteY() { ??? ?while?(true) Console.Write (y);?? // Write y forever ?? } } ?主线程创建了一个新线程“t”,它运行了一个重复打印字母y的方法,同时主线程重复但因字母“x”。CLR分配每个线程到它自己的内存堆栈上,来保证局部变量的分离运行。在接下来的方法中我们定义了一个局部变量,然后在主线程和新创建的线程上同时地调用这个方法。 static?void?Main() { ??new?Thread (Go).Start();????? // Call Go() on a new thread ? ?Go();???????????????????????? // Call Go() on the main thread } ?? static?void?Go() { ?? // Declare and use a local variable - cycles ?? for?(int?cycles = 0; cycles 5; cycles++) Console.Write (?); } 变量cycles的副本分别在各自的内存堆栈中创建,输出也一样,可预见,会有10个问号输出。当线程们引用了一些公用的目标实例的时候,他们会共享数据。下面是实例: class?ThreadTest { ? bool?done; ?? ?static?void?Main() { ?? ?ThreadTest tt = new?ThreadTest();?? // Create a common instance ??? new?Thread (tt.Go).Start(); ? ??tt.Go(); ?} ?? ?// Note that Go is now an instance method ?void?Go() { ?? ?if?(!done) { done = true; Console.WriteLine (Done); } ?} } ?因为在相同的bThreadTest/b实例中,两个线程都调用了bGo()/b,它们共享了bdone/b字段,这个结果输出的是一个Done,而不是两个。 ?静态字段提供了另一种在线程间共享数据的方式,下面是一个以done为静态字段的例子: class?ThreadTest { ?static?bool?done;??? // Static fields are shared between all threads ? static?void?Main() { ? ??new?Thread (Go).Start(); ??? Go(); ? } ?? ? static?void?Go() { ? ??if?(!done) { done = true; Console.WriteLi

文档评论(0)

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

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

1亿VIP精品文档

相关文档