您的位置:首页 > 其它

多线程并发下的单例模式

2015-01-27 13:18 120 查看
多线程并发下的单例模

好久没写点东西了,感觉很对不住各位。今天有点心得正好和大家聊聊闲天。是关于单例模式在并发情况下应该怎么写才对,我还是用.net语言来说这些。
首先,我们都知道单例模式,别说你不知道。
代码如下:
public class Singleton
{
private Singleton() { }
private static Singleton instance = null;
public Singleton GetInstance()
{ return instance == null ? new Singleton() : instance; }
}
但是这个有问题了,多线程下,怎么能保证从instance == null?到new Singleton() : instance之间没有别的线程在操作呢?现在的代码明显满足不了这个情况,而这在高并发下显然是可以出现的。那就想想办法呗,例如我们使用.net中的lock来做修改。
public class Singleton
{
private Singleton() { }
private static Singleton instance = null;
private static object _lock = new object();
public Singleton GetInstance()
{
if (instance == null)
{
lock (_lock)
{
if (instance == null)
{ instance = new Singleton(); }
}
}
return instance;
}
}
这样就可以实现有且仅有一次初始化的机会。
本文出自 “张隽永” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: