当然是整个拷贝一份安全啊。
你没回答“为什么要用同一个模块”这个问题。
* 如果不需要用同一个模块,那么复制是最好的解决办法。
----------------------------------------------------
class ModuleManager {
public:
void WriteModule(const Data& data) {
写锁
module_ = NewModule(data);
}
Module ReadModule() const {
读锁
return module_;
}
private:
Module module_;
};
====================================================
* 如果需要用到同一个模块,那么模块本身就要内部加锁,此时有很多设计问题需要回答才能正确的选择用什么模型。但是可以想象,使用shared_ptr的结果是有一些消费者会用到老的模块而有一些消费者会用到新的模块。所谓的“需要用到同一个模块”根本就无法实现。
【 在 ble (ble) 的大作中提到: 】
: 标 题: Re: shard_ptr这样用有问题吗?
: 发信站: 水木社区 (Tue Jun 22 15:03:44 2021), 站内
:
: 对于一个复杂的公用模块,你说是一边更新里面的细节一边让人用安全,还是完整更新好了,再把新的替换过去安全啊?
:
: 如果完成事务需要调用模块好几次,老司机也怕这样吧:
: p->funcA()
: //blablabla
: newP->funcB()
:
: 在网络服务里面,这些对应的是全局复用模块,而单次请求数据,才适合你说的拷贝场景。
:
:
: 【 在 here080 的大作中提到: 】
: :
: : 为什么要用同一个模块?
: : 更新模块为什么不在原对象上更新,而是新建对象?
: : 【 在 ble (ble) 的大作中提到: 】
: : : 标 题: Re: shard_ptr这样用有问题吗?
:
: #发自zSMTH@IN2010
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 114.255.33.*]
--
FROM 76.126.252.*