锁ReaderWriterLockSlim介绍
概述
ReaderWriterLockSlim 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问;
常用的方法:
- cacheLock.EnterReadLock();//加上读取锁
- cacheLock.ExitReadLock();//退出读取锁
- cacheLock.EnterWriteLock()//加上写入锁;
- cacheLock.ExitWriteLock();//退出写入锁
- cacheLock.TryEnterWriteLock(timeout);//加上超时锁
- cacheLock.EnterUpgradeableReadLock();尝试进入可升级模式锁定状态。
- cacheLock.ExitUpgradeableReadLock();尝试进入可升级模式锁定状态。
- MSDN的DEMO如下:
- using System;
- using System.Threading;
- using System.Collections.Generic;
- public class SynchronizedCache
- {
- private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
- private Dictionary<int, string> innerCache = new Dictionary<int, string>();
- public string Read(int key)
- {
- cacheLock.EnterReadLock();
- try
- {
- return innerCache[key];
- }
- finally
- {
- cacheLock.ExitReadLock();
- }
- }
- public void Add(int key, string value)
- {
- cacheLock.EnterWriteLock();
- try
- {
- innerCache.Add(key, value);
- }
- finally
- {
- cacheLock.ExitWriteLock();
- }
- }
- public bool AddWithTimeout(int key, string value, int timeout)
- {
- if (cacheLock.TryEnterWriteLock(timeout))
- {
- try
- {
- innerCache.Add(key, value);
- }
- finally
- {
- cacheLock.ExitWriteLock();
- }
- return true;
- }
- else
- {
- return false;
- }
- }
- public AddOrUpdateStatus AddOrUpdate(int key, string value)
- {
- cacheLock.EnterUpgradeableReadLock();
- try
- {
- string result = null;
- if (innerCache.TryGetValue(key, out result))
- {
- if (result == value)
- {
- return AddOrUpdateStatus.Unchanged;
- }
- else
- {
- cacheLock.EnterWriteLock();
- try
- {
- innerCache[key] = value;
- }
- finally
- {
- cacheLock.ExitWriteLock();
- }
- return AddOrUpdateStatus.Updated;
- }
- }
- else
- {
- cacheLock.EnterWriteLock();
- try
- {
- innerCache.Add(key, value);
- }
- finally
- {
- cacheLock.ExitWriteLock();
- }
- return AddOrUpdateStatus.Added;
- }
- }
- finally
- {
- cacheLock.ExitUpgradeableReadLock();
- }
- }
- public void Delete(int key)
- {
- cacheLock.EnterWriteLock();
- try
- {
- innerCache.Remove(key);
- }
- finally
- {
- cacheLock.ExitWriteLock();
- }
- }
- public enum AddOrUpdateStatus
- {
- Added,
- Updated,
- Unchanged
- };
- }
锁ReaderWriterLockSlim介绍的更多相关文章
- oracle 锁的介绍 (转)
本文转自:http://blog.csdn.net/gyb2013/article/details/6929697 一.什么是锁: Oracle的锁机制是一种轻量级的锁定机制,不是通过构建锁列表来进行 ...
- Mysql锁机制介绍
Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- redis锁机制介绍与实例
转自:https://m.jb51.net/article/154421.htm 今天小编就为大家分享一篇关于redis锁机制介绍与实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...
- java中的各种锁详细介绍
转自:https://blog.csdn.net/axiaoboge/article/details/84335452 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高 ...
- Java 种15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁等等…
Java 中15种锁的介绍 1,在读很多并发文章中,会提及各种各样的锁,如公平锁,乐观锁,下面是对各种锁的总结归纳: 公平锁/非公平锁 可重入锁/不可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲 ...
- Java中15种锁的介绍
作者:搜云库技术团队 原文:https://segmentfault.com/a/1190000017766364 1. Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观 ...
- AQS学习(一)自旋锁原理介绍(为什么AQS底层使用自旋锁队列?)
1.什么是自旋锁? 自旋锁作为锁的一种,和互斥锁一样也是为了在并发环境下保护共享资源的一种锁机制.在任意时刻,只有一个执行单元能够获得锁. 互斥锁通常利用操作系统提供的线程阻塞/唤醒机制实现,在争用锁 ...
- 自己动手写把”锁”---LockSupport介绍
本篇是<自己动手写把"锁">系列技术铺垫的最后一个知识点.本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒. LockSupport是Java6引入 ...
随机推荐
- supervisor的配置
看了下文档,比较多.http://www.supervisord.org/ 抱着试试又不会怀孕的心态,trying,碰了几鼻子灰,记录如下, 方便大家 1. 安装 easy_install super ...
- JAVA8 十大新特性详解
前言: Java8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...
- [转]Unchecked Exception 和 Checked Exception 比较
Throwable类是所有异常的始祖,它有两个直接子类Error / Exception: Error仅在Java虚拟机中发生动态连接失败或其它的定位失败的时候抛出一个Error对象.一般程序不用 ...
- centos7.0改变用户创建目录组权限
centos7.0改变用户创建目录组权限可通过umask进行设置. 临时改变可通过umask命令进行设置 永久性改变,可通过修改~/.bash_profile的方式进行调整.
- 基于bshare分享平台,在一个页面上实现多个不同内容的web分享
<!--引入bshare SDK--><script type="text/javascript" charset="utf-8" src=& ...
- [转载]Linux命令笔记
*以下内容均来自于网络转载,感谢原作者分享 <对Linux新手非常有用的20个命令> 传送门 英文原文为“Switching From Windows to Nix or a Newbie ...
- 【leetcode】Reverse Nodes in k-Group (hard)☆
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- 【leetcode】Plus One (easy)
Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...
- 【linux】学习4
文件压缩: gzip :压缩 解压缩 zcat: 读取压缩文件 gzip text1 :压缩text1 得到 text1.gz 原文件不见了 gzip -c text1 > text1.g ...
- 【opencv】轮廓相关
IplImage* contours_rect; IplImage* contours; CvMemStorage* countours_storage=NULL; if(contours_rect= ...