线程安全返回值由另一个函数调用获得

时间:2018-03-19 08:57:42

标签: c++ multithreading


我有一些问题,我可以这样简化:这是我的基类代码:

std::string MyBase::get(std::string path) {
  static std::string data;
  data.clear();
  get(path, data);
  return data;
}

Get()在基类中定义如下:

virtual int get(std::string path, std::string &data) = 0;
std::string get(std::string path);

基类是一个抽象类,它实现了上面的函数get(std :: string path),并从具体类中调用get(std :: string path,std :: string& data)。函数get(std :: string path,std :: string& data)是抽象类的纯虚函数,在具体类中被覆盖。
现在,这显然不是威胁安全的解决方案。我想编写线程安全函数get(std :: string path),它将调用get(path,data)并返回正确的数据。

1 个答案:

答案 0 :(得分:1)

您可以简单地将字符串设为本地,例如

std::string MyBase::get(std::string path) {
    std::string data;
    get(path, data);
    return data;
}

或省略间接和其他get()并将其设为虚拟:

struct MyBase {
    virtual std::string get(const std::string &path) = 0;
};