来自于面试题目,(已经多次遇到):后续继续完善
- 写一个单例模式,自己开玩笑说,还好说的是单例模式,如果是其他模式。。。哈哈哈
- 先说了下思路,后面开始写了一个无锁的单例模式
- 完成后,问这个单例模式存在什么问题? — 不能适用于多线程
- 写了后,后面又提示还有什么问题?如果有多个线程在这里等着,会存在那些问题,然后补上了剩下的代码
- 下面代码中,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