作者ghostx2 (Ghostx2)
看板C_Sharp
标题Re: [问题] Volatile正确用法?
时间Sun Jun 16 21:39:02 2013
另外问一下
在单例模式有些范例写法会写成如下
public class Singleton
{
private volatile static Singleton _instance = null;
private static readonly object lockHelper = new object();
private Singleton(){}
public static Singleton CreateInstance()
{
if(_instance == null)
{
lock(lockHelper)
{
if(_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
都已经用lock包住了
为什麽还需要volatile
lock不就有屏蔽效果了
哪还需要volatile达到记忆体的屏蔽
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.41.238.99
1F:推 jinmin88:用synchronized感觉才不需要用lock 06/17 14:34
2F:→ iterator:这是 "double-checked locking is broken" 的问题 06/17 20:03
3F:→ iterator:在_inst=new ...()的同时,if(_inst==null)可能会错误判断 06/17 20:06
4F:→ iterator:volatile是拿来避免这个问题的 06/17 20:08
5F:→ iterator:不过, 在 .NET 里面, 因为 memory model 设计, 06/17 20:09
6F:→ iterator:所以不会遇到这样的情况产生 06/17 20:09
7F:→ iterator:但是, 在 ECMA 标准或是其它 implement 下, 06/17 20:10
8F:→ iterator:不同CPU(x86/x64/IA-64)差异,就不能保证不会有这个问题 06/17 20:11
9F:→ ghostx2:我在MSDN Magazine有看到类似记忆体架构, 无奈实力不够 06/17 22:33
10F:→ ghostx2:尚不能理解文章内容, 看到iterator讲解後就比较浅显易懂 06/17 22:34