g33*_*z0r 2 c pthreads pthread-join
我想做这样的事情:
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);
}
Run Code Online (Sandbox Code Playgroud)
这个想法是由一些线程产生的,并继续做更多的工作main...然后当完成更多工作时,等待线程完成.
它编译得很好,但是在data内部访问时结构被破坏了do_work_son.我认为这是因为线程正在退出,即使我正在调用join main.如果我将pthread_{create,join}调用都移动到start_thread,它工作正常,但然后我的main函数被while循环阻止.这样做我疯了吗?
小智 5
我想这是因为线程正在退出,
不,那是因为data函数中的自动变量,返回start_thread()时无效start_thread(),因此使用其地址后会调用未定义的行为.
要么malloc()为它吃一些记忆,要么让它静止,或者其他什么.只要确保它能够幸免于难start_thread().
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |