Linux系统中pthread_detach相关问题:线程未执行与参数值异常
问题原因解析
1. 线程函数有时未执行的原因
main函数调用pthread_detach(tid)后没有等待线程完成,直接执行return 0终止了整个进程。进程一旦结束,操作系统会强制终止其下所有未完成的线程。如果线程还没被操作系统调度执行,就会被直接销毁,自然没机会运行threadFunction里的代码。
2. 参数值有时为随机值的原因
线程函数接收的是main函数中局部变量a的地址。main函数执行到return 0时,局部变量a所在的栈帧会被回收,对应的内存空间被释放。如果线程在main函数结束后才开始执行,去解引用这个地址时,访问的是已经被释放的内存,里面的数据是系统复用该内存前的随机垃圾值;只有当线程在main函数结束前被调度执行,才能拿到正确的10。
内容的提问来源于stack exchange,提问作者onxy tzy
相关产品推荐
相关产品推荐

