.net 4.0新特性-自旋锁(SpinLock)
来源:互联网 发布:网络直播室 编辑:程序博客网 时间:2024/05/16 23:58
概念:
http://baike.baidu.com/view/1250961.htm?fr=ala0_1_1
http://blog.csdn.net/wzhwho/archive/2009/05/15/4190090.aspx
参考:
http://msdn.microsoft.com/zh-cn/library/dd460716.aspx
http://www.cnblogs.com/lengleng3898/archive/2010/04/20/dotnet_4_parallel_plinq_2.html
http://www.cnblogs.com/prime/articles/1632670.html :) 很不错
msdn代码示例
比较了两种锁的效率
先用Monitor再决定是否用SpinLock
using System;using System.Collections.Generic;using System.Diagnostics;using System.Threading;using System.Threading.Tasks;class SpinLockDemo2{ const int N = 100000; static Queue<Data> _queue = new Queue<Data>(); static object _lock = new Object(); static SpinLock _spinlock = new SpinLock(); class Data { public string Name { get; set; } public double Number { get; set; } } static void Main(string[] args) { // First use a standard lock for comparison purposes. UseLock(); _queue.Clear(); UseSpinLock(); Console.WriteLine("Press a key"); Console.ReadKey(); } private static void UpdateWithSpinLock(Data d, int i) { bool lockTaken = false; try { _spinlock.Enter(ref lockTaken); _queue.Enqueue(d); } finally { if (lockTaken) _spinlock.Exit(false); } } private static void UseSpinLock() { Stopwatch sw = Stopwatch.StartNew(); Parallel.Invoke( () => { for (int i = 0; i < N; i++) { UpdateWithSpinLock(new Data() { Name = i.ToString(), Number = i }, i); } }, () => { for (int i = 0; i < N; i++) { UpdateWithSpinLock(new Data() { Name = i.ToString(), Number = i }, i); } } ); sw.Stop(); Console.WriteLine("elapsed ms with spinlock: {0}", sw.ElapsedMilliseconds); } static void UpdateWithLock(Data d, int i) { lock (_lock) { _queue.Enqueue(d); } } private static void UseLock() { Stopwatch sw = Stopwatch.StartNew(); Parallel.Invoke( () => { for (int i = 0; i < N; i++) { UpdateWithLock(new Data() { Name = i.ToString(), Number = i }, i); } }, () => { for (int i = 0; i < N; i++) { UpdateWithLock(new Data() { Name = i.ToString(), Number = i }, i); } } ); sw.Stop(); Console.WriteLine("elapsed ms with lock: {0}", sw.ElapsedMilliseconds); }}
输出
在短时间占用资源的情况下,差别很大
- .net 4.0新特性-自旋锁(SpinLock)
- 自旋锁spinlock
- 自旋锁 SpinLock
- 自旋锁spinlock
- 自旋锁 spinlock 理解
- 自旋锁(spinlock)
- Spinlock编程(自旋锁)
- 自旋锁(spinlock)
- 自旋锁spinlock
- 自旋锁spinlock
- 自旋锁(spinlock)
- spinlock自旋锁
- spinlock自旋锁
- 自旋锁(spinlock)
- 自旋锁spinlock
- Spinlock 自旋锁 备忘
- spinlock自旋锁分析
- 自旋锁spinlock解析
- MyEclipse XFire开发web service
- Extmail进后台不能正常显示系统的信息的解决办法
- Linux下通过freetds连接MSSQL数据库
- 属性,构造函数,枚举
- .net 4.0新特性-CountDownEvent
- .net 4.0新特性-自旋锁(SpinLock)
- jQuery 表格
- C语言函数的出口——return 语句
- JAVA命令行输入 编译怎么会出现错误!
- 下载wince7------据说 集成了6410的BSP了,嘿嘿过阵子移植到OK6410/REAL6410 上
- 《C现代方法》第五章:选择语句(1)
- javascript中的eval函数
- 设置了镜像的服务器的SQL 2008 数据库的收缩日志
- MongoDb In Action