我使用带有 boost 的线程本地存储。我有一个全局变量:
boost::thread_specific_ptr<MyDataClass> p_timeline_ctx;
我有以下类,它封装了一个 boost::thread 对象并包含一个附加数据对象:
class MyThread {
private :
boost::thread t;
MyDataClass d;
public :
MyThread():c() {}
void start(void) {
ptr.reset(this->d);
this->t = boost::thread(&MyThread::worker, this);
}
void worker(void) {
// do something
}
};
编译时我没有收到任何错误。但是在运行时,当工作函数退出并且线程结束时,我得到一个“glibc ... free ... invalid pointer”错误。
我想这是因为根据 boost 文档,thread_specific_ptr 试图在线程结束时删除它指向的对象。但我不明白如何解决这个问题。