几种语言的单例模式的实现(C++/C#/Object-C)
来源:互联网 发布:滴定分析数据意思 编辑:程序博客网 时间:2024/05/18 02:14
一、 C++
考虑到线程安全、异常安全
class Lock { private: CCriticalSection m_cs; public: Lock(CCriticalSection cs) : m_cs(cs) { m_cs.Lock(); } ~Lock() { m_cs.Unlock(); } }; class Singleton { private: Singleton(); Singleton(const Singleton &); Singleton& operator = (const Singleton &); public: static Singleton *Instantialize(); static Singleton *pInstance; static CCriticalSection cs; }; Singleton* Singleton::pInstance = 0; Singleton* Singleton::Instantialize() { if(pInstance == NULL) { //double check Lock lock(cs); //用lock实现线程安全,用资源管理类,实现异常安全 //使用资源管理类,在抛出异常的时候,资源管理类对象会被析构,析构总是发生的无论是因为异常抛出还是语句块结束。 if(pInstance == NULL) { pInstance = new Singleton(); } } return pInstance; }
二、 OC
+ (singletonObj *)sharedInstance{ static dispatch_once_t onceToken = 0; static singletonObj *sharedObject = nil; dispatch_once(&onceToken, ^{ sharedObject = [[singletonObjr alloc] init]; }); return sharedObject;}
三、 C#
public class Singleton{ //定义一个静态变量来保存类的实例 private static Singleton example; //定义一个标识确保线程同步 private static readonly object locker = new object(); //定义私有构造函数,使外界不能创建该类的实例 private Singleton() { Console.Write("这是单例模式测试\n"); } /// <summary> /// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点 /// </summary> /// <returns></returns> public static Singleton GetInstance() { //多线程同时运行到这里,会同时通过这个判断条件执行条件内的代码 if (example== null)//限制一 { //多线程同时运行到这里后,只能有一个线程通过lock锁,其他线程会被挂起 lock (locker)//限制二 { // 再次判断如果类的实例是否创建,如果不存在则实例化,反之就直接输出类的实例 if (example== null)限制三 { example= new Singleton(); } } } return example; }}
注意创建对象的同步、对象释放以及执行效率等问题。
0 0
- 几种语言的单例模式的实现(C++/C#/Object-C)
- 单例模式 c语言的实现和使用
- Object-c单例模式
- object-c 单例模式
- Object -c 单例模式
- Object-C 单例模式
- object c 单例模式
- C 语言单例的一种实现
- object-c 单例模式的线程安全
- 【Objective-C】单例模式的实现
- Objective-C 单例模式的实现
- c++--Singleton单例模式的实现
- 单例模式 (C语言实现)
- Object-C中单例模式的实现
- Object-c的单例设计
- Object-c 典型的单例写法
- ios object-c 实现Singleton(单例)模式
- Object-C 中实现 Singleton (单例) 模式
- java类的惰性初始化
- OJ 1.M
- 新一代企业即时通信系统 -- 傲瑞通(OrayTalk)
- IOS静态库封装(一)
- C++ 虚函数的深入思考 -动态绑定案例
- 几种语言的单例模式的实现(C++/C#/Object-C)
- JDK 《卸载centos自带的jdk》
- android回调函数总结
- JAVA中int、String的类型转换
- javascript:history.go(-1)返回上一页时,网页已过期
- OJ 1.N
- 每天工作4小时的程序员
- ubuntu 12.04 通过apt-get 安装subversion 1.8
- Android AsyncTask 异步任务