• λ我爱Aspx >> Asp.Net >> 多线程编程笔记(三)
  • 多线程编程笔记(三)

  • :未知  Դ:internet  :2007-5-20 16:40:15  ؼ:
  • 互斥

    1、Monitor.Enter和Monitor.Exit

    Monitor 类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定对象执行该代码。

    注意:使用 Monitor 锁定对象(即引用类型)而不是值类型。

    Monitor 具有以下功能:

    它根据需要与某个对象相关联。

    它是未绑定的,也就是说可以直接从任何上下文调用它。

    不能创建 Monitor 类的实例。

    将为每个同步对象来维护以下信息:

    对当前持有锁的线程的引用。

    对就绪队列的引用,它包含准备获取锁的线程。

    对等待队列的引用,它包含正在等待锁定对象状态变化通知的线程。

    使用 Enter 和 Exit 方法标记临界区的开头和结尾。

    如果临界区是一个连续指令集,则由 Enter 方法获取的锁将保证只有一个线程可以使用锁定对象执行所包含的代码。在这种情况下,建议您将这些指令放在 try 块中,并将 Exit 指令放在 finally 块中。此功能通常用于同步对类的静态或实例方法的访问。

    如果实例方法需要同步线程访问,则它将使用当前实例作为要锁定的对象调用 Enter 和对应的 Exit 方法。由于只能有一个线程持有当前实例上的锁,因此该方法一次只能由一个线程来执行。

    静态方法是使用当前实例的 Type 作为锁定对象以类似的方式来保护的。Enter 和 Exit 方法提供的功能与 C# lock 语句提供的功能相同。

    如果临界区跨越整个方法,则可以通过将 System.Runtime.CompilerServices.MethodImplAttribute 放置在方法上并在 MethodImplAttribute 的构造函数中指定 Synchronized 值来实现上述锁定功能。使用该属性后就不需要 Enter 和 Exit 语句了。请注意,该属性将使当前线程持有锁,直到方法返回;如果可以更早释放锁,则使用 Monitor 类或 C# lock 语句而不是该属性。

    Ҷƪл˵?
  • һƪ漂亮的FLASH菜单
    һƪ根据Dreamweaver里的ToolTip代码改进的提示框