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--io多路复用之select实现
    python--基于socket网络编程
    python--面向对象编程之学生选课系统练习
    python--异常处理
    python--面向对象之三个特性:封装、继承、多态
    python--反射机制
    python--生成器和迭代器
    elasticsearch 创建索引
    elasticsearch 集群搭建
    linux 安装Mosquitto
  • 原文地址:https://www.cnblogs.com/HeroBeast/p/1339575.html
Copyright © 2011-2022 走看看