C ++ Meyers Singleton作为班级成员

时间:2020-03-19 15:27:20

标签: c++ multithreading singleton

我有将由多个工作人员并行使用的数据。所以我尝试像Meyers Singleton这样构造数据

class Data {
public:
  static Data &GetInstance() {
    static Data data();
    return data;
  }
private:
  Data() {cout << "Create data" << endl;}
  ~Data() {cout << "Destroy data" << endl;}
  Data & operator=(const Data &other);
}

然后我定义工人阶级

class Worker {
public:
  Worker() : data_(Data::GetInstance()) {}
  work() {cout << "working on data " << data_ << endl;}
private:
  Data &data_;
}

现在我可以循环测试它了

void do_work() {
  Worker *worker = new Worker();
  worker->work();
  delete worker;
}

for (i = 0: i < 3; i++) {
  do_work();
}

输出为

Create data
working on data 0x7febff47b700
working on data 0x7febff47b700
working on data 0x7febff47b700
Destroy data

但是当我使用这样的线程

void* do_work() {
  Worker *worker = new Worker();
  worker->work();
  delete worker;
  pthread_exit(NULL);
}

pthread_t t[3] = {0};
for (i = 0: i < 3; i++) {
  pthread_create(&t[i], NULL, do_work, (void *)NULL);
  pthread_detach(t[i]);
}

崩溃

Create data
working on data 0x7febff47b700
Destroy data
Segmentation fault (core dumped)

我想念什么?

0 个答案:

没有答案