一,锁定机制最简单的做法就是使用锁定关键字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(),会放弃对资源的所有权

[C#]c#中数据的同步加锁机制 的几种方法的更多相关文章

  1. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

  2. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  3. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

  4. 在PHP代码中处理JSON 格式的字符串的两种方法:

    总结: 在PHP代码中处理JSON 格式的字符串的两种方法: 方法一: $json= '[{"id":"1","name":"\u ...

  5. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  6. 如何在java中跳出当前多重嵌套循环?有几种方法?

    如何在java中跳出当前多重嵌套循环?有几种方法? - 两种方法   - 1.在外层循环定义标记          ok:          for(int i=0;i<100;i++){    ...

  7. VC中加载LIB库文件的三种方法

    VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中&quo ...

  8. 页面中如何引用外部的HTML(四种方法)

    页面中如何引用外部的HTML(四种方法) 一.总结 一句话总结:a.iframe标签        b.ajax引入代码片段        c.link import的方法导入        d.re ...

  9. 深入学习AngularJS中数据的双向绑定机制

    来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...

随机推荐

  1. 前端性能优化实践-gzip

    一名优秀的前端工程师必备技能之一就是要会性能监控,并且能相应的进行性能优化.最近,有需求将项目做一些优化,提升用户的体验.看了一下项目并没有开启gzip,于是着手实现gzip压缩,下面就是具体的实践过 ...

  2. Spring总结之事务

    Spring事务 1)定义 事务是指多个操作单元组成的集合,多个操作单元是整体不可分割的,要么都成功,要么都不成功.必须遵守四个原则(ACID) ●原子性(Atomicity):即事务是不可分割的最小 ...

  3. 5Java基础整理

    1.API:Application programming interface 举例:System类中的 public static void arraycopy(int[] src,int srcP ...

  4. Cannot read property 'data' of undefined —— 小程序开发

    由于疫情原因目前处于半下岗状态,在家的时候就研究起了小程序开发.由于是新手,所以总会遇到各种问题,顺便记录一下. wx.showModal({ title: '提示', content: '这是一个模 ...

  5. P7003 [NEERC2013]Hack Protection

    P7003 [NEERC2013]Hack Protection 题意 给定一个序列 \(a\) ,求有多少个区间满足区间内的数的异或和等于与的和的值. 思路 首先我们求一个异或前缀和 \(s\),对 ...

  6. odoo14--odoo前端框架owl【odoo web library】

    原文链接:https://www.alanhou.org/odoo-14-owl-todolist/ 1.组件树 Root         /   \        A     B       / \ ...

  7. C++第四十三篇 -- VS2017创建控制台程序勾选MFC类库

    用VS2017创建EXE带MFC类库方法 1. File --> New --> Project 2. Windows桌面向导 3. 勾选MFC类库 4. 创建成功 如果项目编译出错 1. ...

  8. jvm源码解读--14 defNewGeneration.cpp gc标记复制之后,进行空间清理

    进入Eden()->clean()函数 void EdenSpace::clear(bool mangle_space) { ContiguousSpace::clear(mangle_spac ...

  9. 关于vue3简单状态管理约定引发的思考

    官方文档的代码是这样的 export const store = { debug: true, state: reactive({ message: 'Hello!' }), setMessageAc ...

  10. SpringBoot 源码解析笔记

    作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 如果大家只关注 Sprin ...