首页 > 代码库 > C# volatile & lock
C# volatile & lock
volatile的使用场景:多个线程同时访问一个变量,CLR为了效率,允许每个线程进行本地缓存,这就导致了变量的不一致性。volatile就是为了解决这个问题,volatile修饰的变量,不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。缺点很明显:牺牲了效率。
lock的使用场景:多个线程同时访问一个代码块,使用lock 修饰该代码块,强制多个线程进行排队,一个接一个的去访问。缺点很明显:排队进行必然导致效率低。
系统中应该尽量减少lock的使用(也就是排队执行的情况),因为根据阿姆达尔定律:S=1/(a+(1-a)/n) ,其中S 为加速比,a 为串行计算部分,n为并行计算节点,该公式意味着:如果具备足够的并行计算节点,要想增加系统的速度,必须减少串行部分。因为串行意味着,一个人做的时候,其他人必须等着。Google 的MapReduce,也就是把串行计算转化为并行计算。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。