多线程编程总结
thread:待等待的子线程的 ID(由pthread_create返回)。retval:子线程的返回值指针。如果不关心返回值,可传NULL。- 返回值:成功返回
0,失败返回错误码(如EINVAL、ESRCH、EDEADLK)。
3. pthread_join 与 pthread_detach 的区别
| 特性 | pthread_join | pthread_detach |
|---|---|---|
| 是否阻塞调用线程 | 阻塞,直到目标线程结束 | 不阻塞,立即返回 |
| 资源回收方式 | 自动回收(线程的栈、线程描述符等) | 需要自行确保资源不泄漏(如使用 pthread_exit) |
| 是否可以多次调用 | 只能对同一线程调用一次 | 只能对同一线程调用一次(调用后不可再 join) |
| 适用场景 | 需要获取子线程返回值或确保子线程完成后再退出 | 线程独立运行,主线程不关心其结束状态 |
在实际项目中,如果子线程的执行结果需要被主线程使用(例如返回计算结果、错误码),则必须使用 pthread_join;如果子线程是“后台任务”,且不需要主线程等待,则可以将其 detach,让系统自行回收资源。
4. pthread_join 的典型使用流程
下面给出一个完整的示例,演示从创建线程到使用 pthread_join 等待线程结束的全过程。代码保持简洁,便于聚焦 pthread_join 的行为。