博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReaderWriterLockSlimHelper
阅读量:6940 次
发布时间:2019-06-27

本文共 5809 字,大约阅读时间需要 19 分钟。

namespace Microshaoft.Web.ShareCache{
using System; using System.Linq; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using Microshaoft; public static class DataManager {
//[STAThread] static void Main(string[] args) {
Console.ReadLine(); string r = string.Empty; while ((r = Console.ReadLine()) != "q") {
if (r == "w") {
Tuple
[] a = new Tuple
[] {
new Tuple
("aspx cs AAA", DateTime.Now, true) , new Tuple
("aspx cs BBB", DateTime.Now, false) , new Tuple
("aspx cs CCC", DateTime.Now, true) }; var list = a.ToList(); DataManager.ShareData = list; ShareData .ForEach ( (x) => {
Console.WriteLine(x.Item2); } ); } else {
ParallelProcess(); } } Console.WriteLine(DataManager.F2); Console.WriteLine(Environment.Version.ToString()); } private static void ParallelProcess() {
var stopWatch = Stopwatch.StartNew(); Parallel.For ( 0 , 10000 * 50 , new ParallelOptions() {
MaxDegreeOfParallelism = 32 } , (x) => {
var z = DataManager.ShareData; z.ForEach ( (xx) => {
//Console.WriteLine(x.Item2); } ); } ); stopWatch.Stop(); Console.WriteLine(stopWatch.ElapsedMilliseconds); } static DataManager() {
Tuple
[] a = new Tuple
[] { new Tuple
("A", DateTime.Now, true) , new Tuple
("B", DateTime.Now, false) , new Tuple
("C", DateTime.Now, true) }; ShareData = a.ToList(); } private static List
> _shareData; private static ReaderWriterLockSlim _readerWriterLockSlim = new ReaderWriterLockSlim(); public static List
> ShareData { set { _readerWriterLockSlim .TryEnterWriterLockSlimWrite
>>(ref _shareData, value, 2); } get { return _readerWriterLockSlim .TryEnterReadLockSlimRead
>> ( (x) => { return _shareData; } , 10 ); //_shareData; } } public volatile static int F1 = 99, F2 = 100; }}namespace Microshaoft{ using System; using System.Threading; public static class ReaderWriterLockSlimExtensionsMethodsManager { public static bool TryEnterWriterLockSlimWrite
( this ReaderWriterLockSlim writerLockSlim , ref T target , T newTarget , int enterTimeOutInSeconds ) where T : class { return ReaderWriterLockSlimHelper .TryEnterWriterLockSlimWrite
( writerLockSlim , ref target , newTarget , enterTimeOutInSeconds ); } public static T TryEnterReadLockSlimRead
( this ReaderWriterLockSlim readerLockSlim , Func
onReadedProcessFunc , int enterTimeOutInSeconds ) { return ReaderWriterLockSlimHelper .TryEnterReadLockSlimRead
( readerLockSlim , onReadedProcessFunc , enterTimeOutInSeconds ); } public static bool TryEnterLockSlim ( this ReaderWriterLockSlim lockSlim , Func
onEnterProcessFunc , Action action , Action
onExitProcessAction ) { return ReaderWriterLockSlimHelper .TryEnterLockSlim ( lockSlim , onEnterProcessFunc , action , onExitProcessAction ); } } public static class ReaderWriterLockSlimHelper { public static bool TryEnterWriterLockSlimWrite
( ReaderWriterLockSlim writerLockSlim , ref T target , T newTarget , int enterTimeOutInSeconds ) where T : class { bool r = false; //var rwls = new ReaderWriterLockSlim(); int timeOut = Timeout.Infinite; if (enterTimeOutInSeconds >= 0) { timeOut = enterTimeOutInSeconds * 1000; } try { r = (writerLockSlim.TryEnterWriteLock(timeOut)); if (r) { Interlocked.Exchange
(ref target, newTarget); r = true; } } finally { if (r) { writerLockSlim.ExitWriteLock(); } } return r; } public static T TryEnterReadLockSlimRead
( ReaderWriterLockSlim readerLockSlim , Func
onReadedProcessFunc , int enterTimeOutInSeconds ) { T r = default(T); var rr = false; //var rwls = new ReaderWriterLockSlim(); int timeOut = Timeout.Infinite; if (enterTimeOutInSeconds >= 0) { timeOut = enterTimeOutInSeconds * 1000; } try { rr = (readerLockSlim.TryEnterReadLock(timeOut)); if (rr) { r = onReadedProcessFunc(readerLockSlim); rr = true; } } finally { if (rr) { readerLockSlim.ExitReadLock(); } } return r; } public static bool TryEnterLockSlim ( ReaderWriterLockSlim lockSlim , Func
onEnterProcessFunc , Action action , Action
onExitProcessAction ) { bool r = false; if (action != null) { try { r = onEnterProcessFunc(lockSlim); if (r) { action(); r = true; } } finally { if (r) { onExitProcessAction(lockSlim); } } } return r; } }}

转载于:https://www.cnblogs.com/Microshaoft/archive/2012/05/05/2484412.html

你可能感兴趣的文章
JAVA MessageDigest MD5 SHA
查看>>
暑假练习:Uva437
查看>>
Android 屏幕自适应方向尺寸
查看>>
java 泛型好文收集
查看>>
Eclipse使用技巧总结(四)——代码重构专题
查看>>
如何将iOS应用发布到App Store详解
查看>>
MyEclipse 编码设置
查看>>
Tcp
查看>>
Shell基本知识
查看>>
POJ 1488
查看>>
删除Azure Active Directory
查看>>
ReLu(Rectified Linear Units)激活函数
查看>>
黑马程序员---java基础-----------------图形化界面(GUI)
查看>>
DB2创建数据库常用参数详解
查看>>
使用sql追踪
查看>>
5: EL 表达式小结
查看>>
[数组]数组元素分割
查看>>
今日学习20190427
查看>>
HIbernate小结
查看>>
iOS开发-数据存储
查看>>