gpt4 book ai didi

c++ - 如何在多线程程序中安全地销毁共享对象?

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:45 25 4
gpt4 key购买 nike

我设计了一些类。是这样的:

  1. ClientEntity 类可以有多个实例。
  2. 当一个ClientEntity对象被创建时,它不会被修改,所以我不使用互斥体。
  3. ClientEntity 对象可以在不同线程之间访问。
  4. ClientEntity 对象在收到一些退出命令时将被销毁。
  5. ClientEntity 对象可能会被某些线程访问。

我怎样才能安全地销毁这个对象?

class ClientEntity
{
public:
conference_info & conf_info (){return conf_info_;}
void conf_info(const conference_info &ci){conf_info_ = ci;}

user_info & usr_info(){return usr_info_;}
void usr_info(const user_info &ui){usr_info_ = ui;}

private:
web_conf_info *wci_;
user_info usr_info_;
conference_info conf_info_;

// .....
};

class user_info
{
public:
user_info & operator = (const user_info &ui)
{
if (this != &ui){
user_id = ui.user_id;
user_name = ui.user_name;
user_role = ui.user_role;
}

return *this;
}
public:
int user_id;
int user_role;
std::string user_name;
};


class conference_info
{
public:
conference_info & operator = (const conference_info &conf)
{
if (this != &conf){
conf_id = conf.conf_id;
dtsip_list = conf.dtsip_list;
ctsip_list = conf.ctsip_list;
}

return *this;
}
public:
int conf_id;
std::list<std::string> dtsip_list;
std::list<std::string> ctsip_list;
};

最佳答案

确定您可以(或不能)删除共享对象的典型方法是使用引用计数 - 通过使用“共享指针”,或者作为类本身中您自己的逻辑的一部分。您将必须具有某种功能,客户端代码使用该功能来表示“我想使用此对象”,从而增加引用计数。当客户端完成时,它调用“我不再对此对象感兴趣”并且引用计数被倒计时。如果引用计数变为零(并且由于其他原因不需要该对象),则可以将其删除。

关于c++ - 如何在多线程程序中安全地销毁共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com