Monitor通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁,也就是这个对象的锁只能有一个线程获得而互斥体Mutex却不是,多个线程可以拥有同一个资源,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。也就是可以多个线程共同拥有,当然,独占访问权只有一个线程获得。

解决方案 »

  1.   

    都可以达到一样的效果最大的分别是 Mutex 可以跨过process 的界限,而Monitor 不行
      

  2.   

    互斥体的概念是什么,Mutex是互斥体吗??那么Monitor又是什么呢??
      

  3.   

    功能差不多吧,我比较喜欢用MONITOR
      

  4.   

    都是用来线程同步的,但是使用的环境不同,有的时候两者都可以,有的时候二者只能用一个.比如如果在异步套接字的receive回调函数中访问共享对象,则可以在访问共享对象的代码的头尾使用对象锁
      

  5.   

    可能是它们两个本来就是很相像吧,我看了“herony420(坦荡荡)”的解释,我觉得互斥体和对象锁没有什么区别,楼上的“种田人”所说的,在异步套接字的receive回调函数中访问共享对象,难道就不能使用互斥体了吗??
      

  6.   

    Monitor 是面向资源来讲的,是锁住资源,比如一个变量;缺点,不能实力化,只能锁引用类型;
    Lock是C#里特有的,也代表锁,它可以作为Monitor 的替代,但容易产生死锁;
    Mutex是面向代码的 ,是锁住一段代码的;其中有个很重要的方法,waitall(),等待所有锁!