C ++ Мейерс Синглтон в классе - PullRequest
0 голосов
/ 19 марта 2020

У меня есть данные, которые будут параллельно использоваться несколькими работниками. Поэтому я пытаюсь построить данные как 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_;
}

Теперь я проверяю их в al oop, и они работают

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)

Что я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...