c#读写锁ReaderWriterLockSlim 解析
表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问
ReaderWriterLockSlim 类支持三种锁定模式:Read,Write,UpgradeableRead。这三种模式对应的方法分别是 EnterReadLock,EnterWriteLock,EnterUpgradeableReadLock 。再就是与此对应的 TryEnterReadLock,TryEnterWriteLock,TryEnterUpgradeableReadLock,ExitReadLock,ExitWriteLock,ExitUpgradeableReadLock。Read 和 Writer 锁定模式比较简单易懂:Read 模式是典型的共享锁定模式,任意数量的线程都可以在该模式下同时获得锁;Writer 模式则是互斥模式,在该模式下只允许一个线程进入该锁。UpgradeableRead 锁定模式可能对于大多数人来说比较新鲜,但是在数据库领域却众所周知。
1、对于同一把锁、多个线程可同时进入读模式。
2、对于同一把锁、同时只允许一个线程进入写模式。
3、对于同一把锁、同时只允许一个线程进入可升级的读模式
不管递归策略如何,在任何时候都只能有一个线程处于写入模式。 当线程处于写入模式时,任何其他线程都不能在任何模式下进入锁定状态。 在任何时候,只能有一个线程处于可升级模式。 任意数量的线程都可以处于读取模式,并且在其他线程处于读取模式时,可以有一个处于可升级模式的线程。

static async Task Main(string[] args)
{
ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
List<int> list = new List<int>() { 0 };
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
var task = Task.Run(async () =>
{
await Task.Delay(new Random().Next(1000));
_lock.EnterUpgradeableReadLock();
var max = list.Max();
try
{
_lock.EnterWriteLock();
try
{
list.Add(++max);
}
finally
{
_lock.ExitWriteLock();
}
}
finally
{
_lock.ExitUpgradeableReadLock();
} });
tasks.Add(task);
}
await Task.WhenAll(tasks);
foreach (var item in list)
{
Console.WriteLine(item);
}
}

c#读写锁ReaderWriterLockSlim 解析的更多相关文章
- C#读写锁ReaderWriterLockSlim的使用
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁.在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能. 某些场合下,对 ...
- 读写锁ReaderWriterLockSlim
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁. 某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用lock方式加锁,则会影响读 ...
- C#读写锁ReaderWriteLockSlim的使用
C#读写锁ReaderWriterLockSlim的使用 using System; using System.Collections.Generic; using System.Linq; usin ...
- 让C#轻松实现读写锁分离--封装ReaderWriterLockSlim
ReaderWriterLockSlim 类 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问. 使用 ReaderWriterLockSlim 来保护由多个线程读取但每次只采用一 ...
- 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁
上一篇聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁 讲了可重入读写锁的基本情况和基本的方法,显示了怎样 ...
- ReentrantReadWriteLock 读写锁解析
4 java中锁是个很重要的概念,当然这里的前提是你会涉及并发编程. 除了语言提供的锁关键字 synchronized和volatile之外,jdk还有其他多种实用的锁. 不过这些锁大多都是基于AQS ...
- Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...
- PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
文件锁全名叫 advisory file lock, 书中有提及. 这类锁比较常见,例如 mysql, php-fpm 启动之后都会有一个pid文件记录了进程id,这个文件就是文件锁. 这个锁可以防止 ...
- 聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁
这篇讲讲ReentrantReadWriteLock可重入读写锁,它不仅是读写锁的实现,而且支持可重入性. 聊聊高并发(十五)实现一个简单的读-写锁(共享-排他锁) 这篇讲了怎样模拟一个读写锁. 可重 ...
- 让C#轻松实现读写锁分离
ReaderWriterLockSlim 类 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问. 使用 ReaderWriterLockSlim 来保护由多个线程读取但每次只采用一 ...
随机推荐
- spring的控制反转DI---基于注解实现
首先在pom.xml里面导入依赖: <dependencies> <!--要使用spring需要添加4个包但是maven会把他的几个依赖包同时下好--> <depende ...
- Coze工作流实战:一键生成像素风格视频
前言 最近像素画风的视频非常火,一个视频浏览量超过10w+的也有很多. 那么这个是怎么实现的? 其实,通过AI工作流可以比较简单地实现这样的短视频. 今天给大家分享一下,我是如何搭建工作流实现的. 欢 ...
- 使用FModel提取《剑星》的资产
前言 红色是毁灭 蓝色是冷漠 绿色是伪装 白色是虚无 黄色是...........发给我!!! 不得不说,金亨泰的审美真的是这个.向金亨泰卡卡敬礼.葱!橙! 闲话少叙,咱就听老二的,开始解包! 本文内 ...
- 数栈产品分享:Kafka—实时离不开的那个TA
一.前言 随着技术不断的成熟及市场需求的日益旺盛,实时开发已经成为当前大数据开发不可或缺的一部分.在整个实时开发的链路中,数据采集需要写入到Kafka,数据处理也需要使用到Kafka.今天我们就针对K ...
- electron-builder 在打包universal的时候报错 both x64 and arm64 builds and not cover
⨯ Detected file "Contents/Resources/src/files/adbtool/mac/adb" that's the same in both x64 ...
- 为什么 战舰stm32f103开发板32.768k晶振没有接电容
主要是方便起振,ST的RTC晶振特难振,不焊接这两个电容,起振率高一点 转自: http://www.openedv.com/forum.php?mod=viewthread&tid=737 ...
- 架构师的新武器:Codigger之软件项目体检Software Project HealthCheck
在软件架构这一充满挑战与创新的领域中,架构师宛如精心雕琢宏伟建筑的艺术大师,他们的每一个决策都决定着软件系统的稳固性.可扩展性和性能表现.而 Codigger 软件项目体检,无疑是架构师手中一件崭新且 ...
- "数据集成国产化:谷云科技的零代码ETL平台与行业创新"
数据集成,是将来自多个来源的数据整合到一个统一的平台,以实现集中管理和分析.它通过消除数据孤岛.提高数据质量,支持实时决策.增强数据分析能力.因此,数据集成在数据生命周期的管理以及企业数智化转型中,具 ...
- iPaaS架构深入探讨
在数字化时代全面来临之际,企业正面临着前所未有的挑战与机遇.技术的迅猛发展与数字化转型正在彻底颠覆各行各业的格局,不断推动着企业迈向新的前程.然而,这一数字化时代亦衍生出一系列复杂而深奥的难题:各异系 ...
- Oracle Exadata存储节点主动替换磁盘最佳实践
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...