资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

如何理解C#线程同步

这篇文章主要介绍“如何理解C#线程同步”,在日常操作中,相信很多人在如何理解C#线程同步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解C#线程同步”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有太湖免费网站建设让你可以放心的选择与我们合作。

在向大家详细介绍C#线程同步之前,首先让大家了解下C#线程的中止,然后全面介绍C#线程同步。

C#线程的中止

由于能够在没有任何征兆的情况下使运行的程序进入一种混乱的状态,Java中的Thread.stop受到了普遍的反对。根据所调用的stop()方法,一个未经检查的java.lang.ThreadDeath错误将会破坏正在运行着的程序的栈,随着它的不断运行,能够解除任何被锁定的对象。由于这些锁被不分青红皂白地被打开,由它们所保护的数据就非常可能陷入混乱状态中。

根据当前的Java文档,推荐的中止一个线程的方法是让运行的线程检查一个由其他的线程能够改变的变量,该变量代表一个“死亡时间”条件。下面的程序就演示了这种方法。

// 条件变量  private boolean timeToDie = false;  // 在每次迭代中对条件变量进行检查。  class StoppableRunnable  extends Runnable {  public void run() {  while( !timeToDie ) {  // 进行相应的操作  }  }  }

上述的讨论对C#中的Abort方法也适合。根据调用的Abort方法,令人捉摸不定的System.Threading.ThreadAbortException可能会破坏线程的栈,它可能释放线程保持的一些变量,使处于保护状态中的数据结构出现不可预测的错误。我建议使用与上面所示的相似的方法来通知一个应该死亡的线程。

C#线程同步

从概念上来看,线程非常易于理解,实际上,由于他们可能交互地对同一数据结构进行操作,因此它们成为了令编程人员头疼的一种东西。以本文开始的 ThreadingExample为例,当它运行时,会在控制台上输出多种不同的结果。从 1 2 3 4 5 1 2 3 4 5到 1 1 2 2 3 3 4 4 5 5或 1 2 1 2 3 3 4 5 4 5在内的各种情况都是可能出现的,输出结果可能与操作系统的线程调度方式之间的差别有关。有时,需要确保只有一个线程能够访问一个给定的数据结构,以保证数据结构的稳定,这也是我们需要C#线程同步机制的原因所在。

为了保证数据结构的稳定,我们必须通过使用“锁”来调整二个线程的操作顺序。二种语言都通过对引用的对象申请一个“锁”,一旦一段程序获得该“锁”的控制权后,就可以保证只有它获得了这个“锁”,能够对该对象进行操作。同样,利用这种锁,一个线程可以一直处于等待状态,直到有能够唤醒它信号通过变量传来为止。

C#线程同步例子:

public static Object synchronizeVariable = "locking variable";   public static void count() {  synchronized( synchronizeVariable ) {  for( int count=1;count<=5;count++ ) {  System.out.print( count + " " );  synchronizeVariable.notifyAll();  if( count < 5 )  try {  synchronizeVariable.wait();  }  catch( InterruptedException error ) {  }  }  }  }

到此,关于“如何理解C#线程同步”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


当前标题:如何理解C#线程同步
路径分享:http://cdkjz.cn/article/pjhgjp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220