线程安全问题

2018-04-14  本文已影响0人  7bfedbe4863a

线程安全问题通常是由全局以及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

  1. 单例模式
    简单的单例模式在实现上是以下面的方式来实现的,这一种写法是线程安全的:
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
#include <windows.h>
class SingletongClass
{
private:     //构造函数私有
    SingletongClass()
    {
       pthread_mutex_init(&mutex);
    }
    SingletongClass(int m)
    {
       pthread_mutex_init(&mutex);
    }
    SingletongClass(const SingletongClass&);   //拷贝构造函数不实现,防止拷贝产生多个实例
    SingletongClass& operator =  (const SingletongClass&);  //复制构造函数不实现,防止赋值产生多个实例
public:
    static SingletongClass* getInstance()    //提供全局访问点
    {
        pthread_mutex_lock(&mutex);
        static SingletongClass m_singleton;    //c++11保证了多线程安全,程序退出时,释放资源
        pthread_mutex_unlock(&mutex);
        return &m_singleton;
    }
private:
    static pthread_mutex_t mutex;
};
#endif
  1. 用shared_ptr / weak_ptr管理
上一篇 下一篇

猜你喜欢

热点阅读