zoukankan      html  css  js  c++  java
  • [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(),会放弃对资源的所有权
  • 相关阅读:
    安卓linux真机调试
    Java开发必装的IntelliJ IDEA插件
    在switch中的case语句中声明变量会被提前
    PostgresSQL 数组包含@>
    SQL 增加列、修改列、删除列
    ConcurrentHashMap 的实现原理
    Apache——DBUtils框架ResultSetHandler接口使用
    [转](不理想)Ubuntu下更改主显示器
    [问题记录]Java关于可变参数重载问题的测试
    使用openssl生成双向加密证书(转)
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14090742.html
Copyright © 2011-2022 走看看