在.NET上执行多线程操作要考虑的两大因素(2)_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:Flex与.NET互操作:基于WebService的数据访问
Flex提供了mx:WebService、mx:HTTPService和mx:RemoteObject标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如WebService)进行数据交互通信显得更加容易. 本文以.NET平台下C#语言开发的WebService作为远程数据源,详细介绍Fl

在.NET架构中,最简单也最常见的解决竞争条件的方法是使用“临界区”。而在VB.NET中,该语句是“加锁”,并在C#中是“锁定”,这两种语句都是把对象作为参数。其他尝试锁定相同对象实例使用的临界区(包括上文所指的)会阻止运行直到锁定解除,这样每次就只有一个临界区运行。我们先前举例的一段代码现在看起来是这样的:

以下为引用的内容:

  int x = 5;

  object lockObject = new object();

  Monitor.Enter(lockObject);

  x = x 10;

  Monitor.Exit(lockObject);

什么是监控器可以提供而临界区做不到的呢?答案是没有。除非你在解锁后需要更细粒度的控制权。有些复杂的代码可能需要锁定或长或短的一段时间,这都取决于运行的情况,比方一个变量的值。在这种情况下,选择监控器要比需选择临界区更合适。

另一个值得关注的有关数据完整性的问题是死锁。当多个线程锁定资源导致它们都不能够继续运行时,就会出现死锁。例如:

以下为引用的内容:

  Thread A:

  Monitor.Enter(object1);

  Monitor.Enter(object2);

  //Do work

  Monitor.Exit(object1);

  Monitor.Exit(object2);

  Thread B:

  Monitor.Enter(object2);

  Monitor.Enter(object1);

  //Do work

  Monitor.Exit(object1);

  Monitor.Exit(object2);

如果线程A和线程B都调用它们的第一段语句并且同时完成运行,那它们都无法调用它们的第二段语句——这就是一个死锁。所以编写代码的时候细心,要仔细想清楚怎样编写代码才更有利。死锁的发生常见于新手,因为他们过分设置锁定把它变得太详细了。如果代码被嵌套锁定通常表明需要对编写的代码加以认真检查。

分享:浅谈在.NET应用程序中进行Erlang风格的并行编程
Erlang能够用来编写高度可伸缩的并行应用程序,其中经常会出现数以百万计的轻量级组件,这种类似于线程的组件被称之为actor。不幸的是,这往往需要您使用Erlang这种相对神秘的编程语言重写所有代码。不过我们也有其他选择,例如使用名不见经传的CCR平台来进

共2页上一页12下一页
来源:模板无忧//所属分类:.Net教程/更新时间:2009-06-11
相关.Net教程