看网上说的加双重锁检查!
private static readonly object _lock = new object();
private static volatile DbSession _instance = null;
private DbSession() { }
public static DbSession CreateInstance()
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
_instance = new DbSession();
}
}
}
return _instance;
}
这样难道不是导致 多个线程都用同一个实例吗?这还叫线程安全? 搞不懂 求大神
单例模式跟线程安全是两个概念:
单例保证一定范围(比如一个appdomain)内仅有一个实例。
线程安全是保证对共享变量有序修改,修改结果是可控制的。
单例在只有一个线程访问时无需加锁的,但如果用于多线程环境,就需要考虑线程安全。加锁可以保证某一时刻仅有一个线程可以访问共享变量,其它线程需要等待,直到解锁。
前提是DbSession已经是线程安全的
你得先清楚单例是个什么意思才行。哥们。
单例,不就是全局共享一个实例嘛!
你这里所谓的线程安全,是指创建这个实例( new DbSession())这一步是线程安全的。
假如 new DbSession()。这个里面要对某一个文件进行独占访问。然后,你2个线程同时运行到 new DbSession()。不久出错了么。是不