GOOD单例模式,多线程同时访问一个实例对象问题的处理,加lock
2011-12-28 16:15
281 查看
多线程同时访问一个实例对象时, 可以给进程加一把锁来处理。lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
public class Singleton
{
private static Singleton instance;
private static readonly object synRoot=new object();
private Singleton() //改为私有
{
}
public static Singleton GetInstance()
{
lock(synRoot)
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
}
双重锁定:不用让线程每次都加锁,而只是在实例未被创建的时候再加锁处理,提高了性能。
public class Singleton
{
private static Singleton instance;
private static readonly object synRoot=new object();
private Singleton() //改为私有
{
}
public static Singleton GetInstance()
{
if(instance==null)
{
lock(synRoot)
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
}
}
相关文章推荐
- 单例模式,多线程同时访问一个实例对象问题的处理,加lock .
- Java线程之锁对象Lock-同步问题更完美的处理方式代码实例
- Java多线程(八):锁对象Lock-同步问题更完美的处理方式
- [负载均衡案例分享系列] 一个由负载均衡使用模式导致间断访问失败问题的处理
- java多线程:锁对象Lock-同步问题更完美的处理方式
- 触发器(当2个表中的相应值改变时同时改变一个表中的一个字段)(同时有处理“无法解决 equal to 操作的排序规则冲突”问题)
- Java线程(八):锁对象Lock-同步问题更完美的处理方式(转)
- 饿汉模式和懒汉模式的多线程访问问题
- WCF并发(Concurrency)的本质:同一个服务实例上下文(InstanceContext)同时处理多个服务调用请求
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- PHP解决多线程同时读写一个文件的问题
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- 多个线程可能会试图同时访问某个对象。在多个线程同时争相访问某个对象的同时,如果一个线程修改了资源,有些线程可能会收到无效状态。例如,如果某个线程读取对象的字段,同时另一线程正在修改该字段,则第一个线程可能会收到无效的字段状态。这种情况称为竞用情况。
- [置顶] PHP5 面向对象的一个新疑惑点,类对象实例竟然能访问类中私有方法,不知道是不是bug
- 单例模式--确保一个类只有一个实例,并提供一个全局访问点。
- php中,高并发状态下文件的读写 (解决多线程同时读写一个文件的问题)
- 因文件对象未释放导致文件无法删除问题处理或访问
- Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题
- PHP解决多线程同时读写一个文件的问题
- 锁对象Lock-同步问题更完美的处理方式