码迷,mamicode.com
首页 > 其他好文 > 详细

C# volatile & lock

时间:2014-05-09 03:19:04      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:c   strong   使用   代码   a   amp   

volatile的使用场景:多个线程同时访问一个变量,CLR为了效率,允许每个线程进行本地缓存,这就导致了变量的不一致性。volatile就是为了解决这个问题,volatile修饰的变量,不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。缺点很明显:牺牲了效率。

lock的使用场景:多个线程同时访问一个代码块,使用lock 修饰该代码块,强制多个线程进行排队,一个接一个的去访问。缺点很明显:排队进行必然导致效率低。

系统中应该尽量减少lock的使用(也就是排队执行的情况),因为根据阿姆达尔定律:S=1/(a+(1-a)/n) ,其中S 为加速比,a 为串行计算部分,n为并行计算节点,该公式意味着:如果具备足够的并行计算节点,要想增加系统的速度,必须减少串行部分。因为串行意味着,一个人做的时候,其他人必须等着。Google 的MapReduce,也就是把串行计算转化为并行计算。

C# volatile & lock,布布扣,bubuko.com

C# volatile & lock

标签:c   strong   使用   代码   a   amp   

原文地址:http://www.cnblogs.com/zhaox583132460/p/3716423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!