博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

lock,Interlocked

Posted on 2008-06-16 10:45  懒人ABC  阅读(964)  评论(3编辑  收藏  举报
关键字:
      lock:软件锁,防止多线程访问同一段代码。
      Interlocked:为多个线程共享的变量提供原子操作。

当需要多个线程执行执行同一段代码,有可能发生同时访问的情况,这时就有可能发生冲突。
为了避免发生冲突,VS.Net里使用了软件锁(lock)。
通过软件锁,在同一个时刻,只允许一个线程访问该段代码。
其他线程如果也在这个时刻访问该段代码的话,将会被系统置为睡眠状态。
只有第一个访问线程结束对这段代码的访问之后,才会唤醒第二个访问线程。
依次类推。

用法
public static int s_CallCount = 0;
public void SetCallCount()
{
    lock(this)//这里是锁定整个对象的意思
    {
        s_CallCount ++;
    }
}

private ArrayList m_Pages = new ArrayList();
public void SetCallCount(DataTable pPage)
{
    lock(this.m_Pages)//这里是锁定数组列表对象的意思
    {
        this.m_Pages.Add(pPage);
    }
}



lock(object)
这里的object可以是arraylist,class等引用对象。

如果是数值对象,最好追加修饰符(private static)进行设定。

对于多线程共享数值,可以使用Interlocked类来出来读取或者自动加一,减一等。