我有将由多个工作人员并行使用的数据。所以我尝试像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)
我想念什么?