[C#]c#中数据的同步加锁机制 的几种方法
一,锁定机制最简单的做法就是使用锁定关键字Lock。Lock关键字英文中就是锁的意思,顾名思义就是为操作加上一把锁。它的语法如下:
lock(lockObj) |
二、同步方法(synchronized)
案例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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(),会放弃对资源的所有权
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了