• [C#]c#中数据的同步加锁机制 的几种方法


    一,锁定机制最简单的做法就是使用锁定关键字Lock。Lock关键字英文中就是锁的意思,顾名思义就是为操作加上一把锁。它的语法如下:

    lock(lockObj)
    {
    //加锁的代码段,一般是操作共同资源的代码
    }

    二、同步方法(synchronized)

    案例代码:

    using System;
    
    using System.Runtime.CompilerServices;
    
    namespace App4Thread
    {
    	class Program
    	{
    		private static int count = 0;
    	    private static object myMutex = new object();
    	    
    	    [MethodImpl(MethodImplOptions.Synchronized)]
    	    public static void Main()
    	    {
    	         count++;
    	
    	    }
    	}
    	
    }

    [MethodImpl(MethodImplOptions.Synchronized)],该属性在方法调用期间锁定,阻止其他调用者调用。

    命名空间:System.Runtime.CompilerServices

    程序集:mscorlib(mscorlib.dll 中)

    功能:System.Runtime.CompilerServices命名空间为编译器编写器提供使用托管代码在元数据中指定属性。

     三c#中Monitor的使用

     首先lock和Minitor有什么区别呢?
    其实lock在IL代码中会被翻译成Monitor。也就是Monitor.Enter(obj)和Monitor.Exit(obj).
    lock(obj)
    {
    }
    等价为:
    try
    {   
          Monitor.Enter(obj)
    }
    catch()
    {}
    finally
    {
          Monitor.Exit(obj)
    }
    所以lock能做的,Monitor肯定能做,Monitor能做的,lock不一定能做。那么Monitor额外的功能呢?

    1:Monitor.TryEnter(obj,timespan)----timeout之后,就不执行这段代码了。lock可是一直会死等的。
    
    2:还有Monitor.Wait()和Monitor.Pulse()。在lock代码里面如果调用了Monitor.Wait(),会放弃对资源的所有权
  • 相关阅读:
    gradle项目与maven项目互转
    GET和POST两种基本请求方法的区别
    gradle项目打war和jar包
    maven项目打war和jar
    winsw打包jar
    前端
    CentOS
    Vue
    Spring
    Vue
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14090742.html
Copyright © 2020-2023  润新知