std中关于shared_ptr智能指针的应用,常用在网络连接管理 数据库连接、共享变量,用于自动内存资源管理(RAII机制)
但是shared_ptr其实不是线程安全的,是因为ref指针跟cnt计数是两个部分,所以这里没有锁,是非线程安全的,那么在生产环境代码怎么实现一个线程安全的 智能指针的。
template <typename T>
typeclass DataManager {
public:
DataManager() : data_(new T) {};
private:
std::shared_ptr<T> data_;
}
template <typename T>
typeclass DataManager {
public:
DataManager() : data_(new T) {};
std::shared_ptr<const T> get() const { //const修饰函数,const修饰变量
return data_;
}
void modify(const T& new_obj) { //替换data_
std::shared_ptr<ptr> tmp = std::make_shared<T> (new_obj);
data_ = tmp;
}
private:
std::shared_ptr<T> data_;
}
template <typename T>
typeclass DataManager {
public:
DataManager() : data_(new T) {};
std::shared_ptr<const T> get() const {
std::lock_guard<decltype(lock_)> lock(lock_);
return data_;
}
void modify(const T& new_obj) {
std::shared_ptr<ptr> tmp = std::make_shared<T> (new_obj);
std::lock_guard<decltype(lock_)> lock(lock_);
data_ = tmp;
}
private:
mutable std::mutex lock_; //加mutalbe保证多线程不会cache住
std::shared_ptr<T> data_;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。