zoukankan      html  css  js  c++  java
  • lock,Interlocked

    关键字:
          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类来出来读取或者自动加一,减一等。
  • 相关阅读:
    MySQL详细操作
    啥是SQL?
    MySQL之中文乱码问题
    Windows压缩包安装MySQL
    GIL(全局解释器锁)
    协程
    线程
    第八周 编程作业
    PCA
    第八周 第一部分
  • 原文地址:https://www.cnblogs.com/si812cn/p/1222890.html
Copyright © 2011-2022 走看看