.Net中常见锁

序言

锁的核心作用是用来控制并发环境下对变量和资源的有序访问,c#中常见的锁有如下几种类型:

(1) Monitor

(2) Mutex

(3) ReaderWriterLockSlim

(4) SpinLock

(5) Semaphore

lock锁

复制代码
//定义一个私有成员变量,用于Lock的锁定标志  
    private static object lockobj = new object();
    void DoSomething()
    {
        lock (lockobj)
        {
            //需要锁定的代码块  
        }
    }
View Code
复制代码

volatile 

private volatile bool isStart = false;

更通俗的解释:

Volatile 字面的意思时易变的,不稳定的。在C#中也差不多可以这样理解。

编译器在优化代码时,可能会把经常用到的代码存在Cache里面,然后下一次调用就直接读取Cache而不是内存,这样就大大提高了效率。但是问题也随之而来了。

在多线程程序中,如果把一个变量放入Cache后,又有其他线程改变了变量的值,那么本线程是无法知道这个变化的。它可能会直接读Cache里的数据。但是很不幸,Cache里的数据已经过期了,读出来的是不合时宜的脏数据。这时就会出现bug。

用Volatile声明变量可以解决这个问题。用Volatile声明的变量就相当于告诉编译器,我不要把这个变量写Cache,因为这个变量是可能发生改变的。

资料

https://www.cnblogs.com/xibei/p/12001805.html

C# 针对特定的条件进行锁操作,不用lock,而是mutex

 

posted @   ~沐风  阅读(875)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2016-03-11 SQL Server 基础:朝花夕拾
2016-03-11 SQL Server 基础:Case两种用法

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示