我想做这样的事情:
void *do_work_son(void *data)
{
mystruct *d = (mystruct*)data;
while(true)
{
// d->whatever is corrupt
}
}
void start_thread(pthread_t *mt)
{
mystruct data = ...;
pthread_create(&(*mt), NULL, do_work_son, (void *)&data);
}
int main()
{
pthread mt;
start_thread(&mt);
// do more stuff here
pthread_join(mt, NULL);
}
这个想法是产生一些线程并继续做更多的工作main
......然后当完成更多的工作时,等待线程完成。
它编译得很好,但是data
当它在内部被访问时结构被破坏了do_work_son
。我认为这是因为线程正在退出,即使我正在调用 join in main
。如果我将pthread_{create,join}
调用都移到 start_thread,它可以正常工作,但是我的 main 函数被 while 循环阻塞。我这样做是不是疯了?