share_ptr的线程安全读写方式

class T { 
public:
	int get() { return t; }
	void set(int num) { t = num; }
	T():t(1) {}
private:
	int t; };
std::mutex g_mut;
std::shared_ptr<T> g_ptr;
void func(const std::shared_ptr<T>& pt) { std::cout<<pt->get(); }
void setFunc(const std::shared_ptr<T>& pt,int num) { pt->set(num); }
void read()
{
	std::shared_ptr<T> localPtr;
	{
		std::lock_guard<std::mutex> lock(g_mut);
		localPtr = g_ptr;
	}
	func(localPtr);
}
void write(int num)
{
	std::shared_ptr<T> newPtr(new T);
	{
		std::lock_guard<std::mutex> lock(g_mut);
		g_ptr = newPtr;
	}
	
	setFunc(newPtr, num);
}
int main()
{
	g_ptr = std::shared_ptr<T>(new T);
	write(2);
	read();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值