C#多线程锁

lock语句

lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:

Object thisLock = new Object();
lock (thisLock)
{
    // Critical code section
}

Monitor 类

当多线程同时用到一个对象时,也会出现和公用代码类似的问题,这时就不能用lock关键字了,需要用到System.Threading中的Monitor类,监视器,其提供了使线程共享资源的方案。其可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。对象锁机制保证了在可能引起混乱的情况下同时只有一个线程可以访问这个对象。使用方法如下:

Object o = new Object();

Monitor.Enter(o);

//当前线程可以操作o对象了

Monitor.Exit(o);

对于任何一个被Monitor锁定的对象,内在中都保存着与它相关的一些信息:

其一是现在持有锁的线程的引用;

其二是一个预备队列,队列中保存了已经准备好获取锁的线程;

其三是一个等待队列,队列中保存着当前正在等待这个对象状态改变的队列的外用。

posted on 2011-02-23 16:31  Gavin Young  阅读(764)  评论(1编辑  收藏  举报

导航