单例设计模式共享数据问题

	mutex m_silver;
	std::once_flag m_flag;

	class Singleton
	{
		static void Create_Instance()
		{
			cout << "Create_Instance() ing!" << endl;
			m_S_ton = new Singleton();
			static Singleton_Recharge cl;
		}
	public:
		static Singleton* Get_Instance()
		{
			//提高效率
			if (m_S_ton == NULL)  //双重锁定
			{
				unique_lock<mutex> m_unique(m_silver);
				if (m_S_ton == NULL)
				{
					m_S_ton = new Singleton();
					static Singleton_Recharge cl;
				}
			}
			
			//一个线程会等待另外一个线程执行完Create_Instance
			//std::call_once(m_flag, Create_Instance); 
			return m_S_ton;
		}

		class Singleton_Recharge
		{
		public:
			~Singleton_Recharge()
			{
				if (Singleton::m_S_ton)
				{
					delete Singleton::m_S_ton;
					Singleton::m_S_ton = NULL;
				}
			}
		};

		void func()
		{
			cout << "Singleton test" << endl;
		}


	private:
		Singleton(){}

	private:
		static Singleton* m_S_ton;

	};

	Singleton* Singleton::m_S_ton = NULL;


	void mythread()
	{
		cout << "my thread starting" << endl;

		Singleton* ptr = Singleton::Get_Instance();

		ptr->func();

		cout << "my thread finished" << endl;

		return;
	}

	void main_test()
	{
		thread myobj(mythread);
		thread myobj1(mythread);

		myobj.join();
		myobj1.join();

		cout << "main finished" << endl;
	}

##建议先在主线程中将单例初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值