zoukankan      html  css  js  c++  java
  • lock关键字用法

    在.net中线程同步有一下几种方式:

    1.lock语句

    2.监视器

    3.同步事件和等待句柄

    4.Mutex对象

     

    lock语句用于给对象获取互斥锁,执行操作语句,然后再释放该锁。在线程同步时,lock关键字将语句块标记为临界区,能保证代码顺利执行而不被其他线程中断,变量被包装在独占锁中。其他线程只能等待执行解锁之后才能访问改对象。如下

    public static void Mian()

    {

    object o = new object();

    lock(o)

    {

          //执行线程同步相关操作

    }

    }

     

    其实上面的代买等价于:

    public static void Mian()

    {

    object o = new object();

    System.Threading.Monitor.Enter(o);

    try

    {

          //执行线程同步相关操作

    }

    finally

    {

          system.Threading.Monitor.Exit(o);

            }

    }

     

    lock 的规则:

    1.lock的对象必须是引用类型参数。

    2.避免锁定公共对象或不受应用程序控制的对象实例,最好是定义private对象来锁定。

    3.String类型对象对多线程操作是安全的,因此不建议锁定字符串类型对象。

    4.避免死锁。让两个线程以相同的枷锁顺序锁定对象,是避免死锁的有效手段。

    5.Monitor类还提供了一个TryEnter的方法,使用更加灵活。可以有效的解决死锁的发生。

    6.线程同步最好之应用在需要的时候,因为锁定对象对系统性能存在影响。一方面是枷锁与解锁的系统开销,另一方面可能导致其他线程因为等对释放对象而暂停执行。


  • 相关阅读:
    手撸机器学习算法
    手撸机器学习算法
    《Python深度学习》 Part 1
    使用Gimp制作Windows应用程序图标
    C# 检查硬盘分区是ssd还是hdd
    微信小程序授权登录以及用户信息相关接口调整导致授权框不弹出
    CNN-LSTM
    MIL基本语法
    Akka Platform Guide 关键点梳理
    阿里云windows服务器激活
  • 原文地址:https://www.cnblogs.com/HeroBeast/p/1339575.html
Copyright © 2011-2022 走看看