概念:

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)相关推荐

  1. JDK5.0新特性系列---目录

    JDK5.0新特性系列---目录 JDK5.0新特性系列---1.自动装箱和拆箱 JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列--- ...

  2. Redis 6.0 新特性-多线程连环13问!

    来自:码大叔 导读:支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有 ...

  3. Redis 6.0 新特性,多线程连环 13 问!

    导读:支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有线程安全问题? ...

  4. Redis 6.0 新特性:多线程连环 13 问!

    来源 | 码大叔 责编 | Carol 封图 | CSDN付费下载自视觉中国 支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后 ...

  5. mysql8+新语法_MySQL8.0新特性

    无意中发现MySQL的版本已经更新到8.0了,了解一下不同的地方 数据字典 新增了事务型的数据字典,用来存储数据库对象信息 之前,字典数据是存储在元数据文件和非事务型表中的 账号权限管理 添加了对 & ...

  6. Android5.0,6.0,7.0,8.0新特性整理

    背景 Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多.然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商.芯片制造商.运营 ...

  7. Redis 6.0 新特性-多线程连环 13 问!

    Redis 6.0 来了 在全国一片祥和IT民工欢度五一节假日的时候,Redis 6.0不声不响地于5 月 2 日正式发布了,吓得我赶紧从床上爬起来,学无止境!学无止境! 对于6.0版本,Redis之 ...

  8. TiDB 6.0 新特性

    TiDB 6.0 新特性 Placement Rules in SQL 小表缓存 内存悲观锁 Top SQL TiDB Enterprise Manager(TiEM) Placement Rules ...

  9. Android6.0新特性

    1.大量漂亮流畅的动画 安卓6.0系统增加了大量漂亮的过度动画,可以从视觉上减少卡顿感,给用户带来流畅的体验.说到过渡动画,以前可是苹果手机的拿手好戏,现在安卓大有赶超iOS的趋势. 2.相机新增专业 ...

最新文章

  1. SpringMVC 学习-异常处理 SimpleMappingExceptionResolver 类
  2. Keil使用 fromelf 生成bin文件
  3. 第十七单元 Samba服务
  4. oracle catalog start with,rman中进行catalog start with 无法注册部分备份文件
  5. 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
  6. Git rebase 和 Git merge 的区别,你知道吗?
  7. 【Java】批判一个有关++的Java选择题
  8. FFmpeg源代码简单分析:avio_open2()
  9. OpenGL基础21:材质
  10. 农业农村部:非洲猪瘟对猪肉市场价格影响有限
  11. xml文件的根节点layout_width或者layout_height设置无效果的原因分析
  12. 好爽 java_JAVA Web学习(27)___第21章清爽夏日九宫格日记网
  13. 接口测试常用工具及测试方法
  14. 没错,中国程序员前景一片黑暗
  15. 置信区间的置信区间_什么是置信区间,为什么人们使用它们?
  16. html拼凑成一张图片,(代码片段)利用canvas,把多张图合并成一张图片
  17. 2022年后疫情时代下市场研报报告合集(共90份)
  18. 第一行代码 第三版 第11章网络技术 11.6.1 Retrofit 应用 报错:android.system.ErrnoException: isConnected failed: ECONNRE
  19. [siggraph13]《巫师3》角色渲染
  20. laravel实现点餐系统

热门文章

  1. linux 分析系统配置,在Linux系统上部署AWStats日志分析系统
  2. Android CountDownTimer示例
  3. arcore 示例_Android增强现实– Android ARCore示例
  4. 开课吧课堂:finally如何使用?作用是什么?
  5. Chocolatey 在Window搭建一个开发环境
  6. Kubernetes Scheduler Deep Dive
  7. 8月30日学习内容整理:命名空间,作用域,函数名本质,闭包
  8. 获取编译学习笔记 (十三)—— 外部中断
  9. linux下监控磁盘空间脚本
  10. linux 多窗口查看多命令的操作结果