.net 4.0新特性-自旋锁(SpinLock)
概念:
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);} }
输出
在短时间占用资源的情况下,差别很大
转载于:https://www.cnblogs.com/Clingingboy/archive/2010/06/10/1755358.html
.net 4.0新特性-自旋锁(SpinLock)相关推荐
- JDK5.0新特性系列---目录
JDK5.0新特性系列---目录 JDK5.0新特性系列---1.自动装箱和拆箱 JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列--- ...
- Redis 6.0 新特性-多线程连环13问!
来自:码大叔 导读:支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有 ...
- Redis 6.0 新特性,多线程连环 13 问!
导读:支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有线程安全问题? ...
- Redis 6.0 新特性:多线程连环 13 问!
来源 | 码大叔 责编 | Carol 封图 | CSDN付费下载自视觉中国 支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后 ...
- mysql8+新语法_MySQL8.0新特性
无意中发现MySQL的版本已经更新到8.0了,了解一下不同的地方 数据字典 新增了事务型的数据字典,用来存储数据库对象信息 之前,字典数据是存储在元数据文件和非事务型表中的 账号权限管理 添加了对 & ...
- Android5.0,6.0,7.0,8.0新特性整理
背景 Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多.然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商.芯片制造商.运营 ...
- Redis 6.0 新特性-多线程连环 13 问!
Redis 6.0 来了 在全国一片祥和IT民工欢度五一节假日的时候,Redis 6.0不声不响地于5 月 2 日正式发布了,吓得我赶紧从床上爬起来,学无止境!学无止境! 对于6.0版本,Redis之 ...
- TiDB 6.0 新特性
TiDB 6.0 新特性 Placement Rules in SQL 小表缓存 内存悲观锁 Top SQL TiDB Enterprise Manager(TiEM) Placement Rules ...
- Android6.0新特性
1.大量漂亮流畅的动画 安卓6.0系统增加了大量漂亮的过度动画,可以从视觉上减少卡顿感,给用户带来流畅的体验.说到过渡动画,以前可是苹果手机的拿手好戏,现在安卓大有赶超iOS的趋势. 2.相机新增专业 ...
最新文章
- SpringMVC 学习-异常处理 SimpleMappingExceptionResolver 类
- Keil使用 fromelf 生成bin文件
- 第十七单元 Samba服务
- oracle catalog start with,rman中进行catalog start with 无法注册部分备份文件
- 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
- Git rebase 和 Git merge 的区别,你知道吗?
- 【Java】批判一个有关++的Java选择题
- FFmpeg源代码简单分析:avio_open2()
- OpenGL基础21:材质
- 农业农村部:非洲猪瘟对猪肉市场价格影响有限
- xml文件的根节点layout_width或者layout_height设置无效果的原因分析
- 好爽 java_JAVA Web学习(27)___第21章清爽夏日九宫格日记网
- 接口测试常用工具及测试方法
- 没错,中国程序员前景一片黑暗
- 置信区间的置信区间_什么是置信区间,为什么人们使用它们?
- html拼凑成一张图片,(代码片段)利用canvas,把多张图合并成一张图片
- 2022年后疫情时代下市场研报报告合集(共90份)
- 第一行代码 第三版 第11章网络技术 11.6.1 Retrofit 应用 报错:android.system.ErrnoException: isConnected failed: ECONNRE
- [siggraph13]《巫师3》角色渲染
- laravel实现点餐系统