Linux线程概述与操作指南
线程与进程对比
- 线程是轻量级进程,属于某个进程,共享进程资源但拥有独立栈区(默认8MB)。
- 进程资源独立,稳定性更高;线程崩溃可能导致整个进程崩溃。
- 线程创建开销更小(仅需分配栈区),并发度高于进程。
线程操作步骤(POSIX标准)
创建线程
使用pthread_create函数:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);thread:返回线程ID。attr:线程属性(通常为NULL)。start_routine:线程执行的函数(回调函数)。arg:传递给回调函数的参数。
获取线程ID
pthread_t pthread_self(void);返回当前线程ID,格式为unsigned long int(%lu)。
线程控制函数
线程退出
- 主动退出:
pthread_exit(void *retval)retval为线程退出状态(如返回结果或错误码)。 - 强制终止:
pthread_cancel(pthread_t thread)
请求终止指定线程。
资源回收
- 阻塞回收:
pthread_join(pthread_t thread, void **retval)
等待指定线程结束并回收资源,retval接收线程退出状态。 - 自动回收:
pthread_detach(pthread_t thread)
设置分离属性,线程退出后系统自动回收资源(无需pthread_join)。
线程信息查看命令
- 显示线程详细信息:
ps -eLo pid,ppid,lwp,stat,commlwp:线程ID,stat:线程状态。
- 查看线程与进程关系:
ps -eLf
注意事项
- 稳定性:多线程程序中需确保资源访问同步(如互斥锁)。
- 错误处理:检查函数返回值(非0表示失败)。
- 分离属性:设置
pthread_detach后不可再调用pthread_join。
示例代码片段:
void *thread_func(void *arg) { printf("Thread ID: %lu\n", pthread_self()); pthread_exit((void *)42); // 退出并返回状态 } pthread_t tid; pthread_create(&tid, NULL, thread_func, NULL); int *retval; pthread_join(tid, (void **)&retval); // 阻塞等待并回收