来自于面试题目,(已经多次遇到):后续继续完善
写一个单例模式,自己开玩笑说,还好说的是单例模式,如果是其他模式。。。哈哈哈先说了下思路,后面开始写了一个无锁的单例模式完成后,问这个单例模式存在什么问题? — 不能适用于多线程写了后,后面又提示还有什么问题?如果有多个线程在这里等着,会存在那些问题,然后补上了剩下的代码下面代码中,2、3是根据提示完成的 class Sigleton { private: Sigleton(){} static Sigleton *m_pInstance; static mutexlock *m_pMutex; //2 public: static Sigleton *getInstance() { if(m_pInstance == NULL) { m_pMutex.lock(); //2 if(m_pInstance == NULL) //3 m_pInstance = new Sigleton; m_pMutex.unlock(); //2 } return m_pInstance; } }; Sigleton *Sigleton::m_pInstance = NULL; Sigleton *Sigleton::m_pMutex; //2使用pthread_once实现单例模式:待完善。
参考: pthread_once实现单例模式,《Linux多线程服务端编程》陈硕,P49