我有这个问题,有一个Manager
会创建几个Worker
s来做一些工作,每个worker会触发一个线程,代码如下:
void Manager::create_workers(int n)
{
_workers_vec.push_back( Worker() ); //save workers in Manager::_workers_vec
_workers_vec.back().start(); //call the newly created worker's start() to fire a thread
}
void Worker::start()
{
pthread_create(&_thread_id, NULL, routine, this); //here is the problem
}
问题是,Worker
的线程例程将this
作为例程参数以使用 的某些数据成员Worker
,但是Worker
对象被创建并推回Manager::_workers_vec
,当_workers_vec
的容量不足以容纳更多Worker
对象时,它必须扩展,在此期间旧Worker
对象将被复制到新分配的空间,然后被销毁。
这将导致Segment fault
, 因为线程routine
正在运行并this
用作传入的参数,并且在' 扩展this
期间被破坏。vector
除了_workers_vec
从vector<Worker>
to更改之外vector<Worker *>
,关于如何处理routine
' 传入参数的任何更好的想法?