zoukankan      html  css  js  c++  java
  • 基础才是重中之重~lock和monitor的区别

    回到目录

    Monitor的介绍

    1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁无法释放,所以需要在try{} catch(){}之后的finally{}结构体中释放锁(Monitor.Exit())。

    2.Monitor的常用属性和方法:

    1. Enter(Object) 在指定对象上获取排他锁。
    2. Exit(Object) 释放指定对象上的排他锁。
    3. IsEntered 确定当前线程是否保留指定对象锁。
    4. Pulse 通知等待队列中的线程锁定对象状态的更改。
    5. PulseAll 通知所有的等待线程对象状态的更改。
    6. TryEnter(Object) 试图获取指定对象的排他锁。
    7. TryEnter(Object, Boolean) 尝试获取指定对象上的排他锁,并自动设置一个值,指示是否得到了该锁。
    8. Wait(Object) 释放对象上的锁并阻止当前线程,直到它重新获取该锁。

    Lock的介绍 

     1.Lock关键字实际上是一个语法糖,它将Monitor对象进行封装,给object加上一个互斥锁,A进程进入此代码段时,会给object对象加上互斥锁,此时其他B进程进入此代码段时检查object对象是否有锁?如果有锁则继续等待A进程运行完该代码段并且解锁object对象之后,B进程才能够获取object对象为其加上锁,访问代码段。

     2.Lock关键字封装的Monitor对象结构如下:

                try
                {
                    Monitor.Enter(obj);
                    dosomething();
                }
                catch(Exception ex)
                {
                    
                }
                finally
                {
                    Monitor.Exit(obj);
                }

    3. lock的对象应该是私有的静态对象

            private static object obj = new object();
            public void something()
            {
                lock (obj)
                {
                    dosomething();
                }
            }

    Monitor和Lock的区别

      1.Lock是Monitor的语法糖。

      2.Lock只能针对引用类型加锁。

      3.Monitor能够对值类型进行加锁,实质上是Monitor.Enter(object)时对值类型装箱。

    感谢各位的阅读!

    回到目录

  • 相关阅读:
    sql注入之payload
    cve2019-0708漏洞复现
    xss学习
    kernel panic not syncing
    nodeJS爬虫
    JS刷题自制参考知识
    HTML Cookie
    点击按钮触发div颜色改变的几种写法
    Bootstrap4布局(简要)
    jQuery实现论坛发帖Demo
  • 原文地址:https://www.cnblogs.com/lori/p/9055640.html
Copyright © 2011-2022 走看看