Linux—线程—01
·
一、基本概念
1. 进程 vs 线程
| 项目 | 进程 | 线程 |
|---|---|---|
| 定义 | 系统中最小的资源分配单位(CPU + 内存) | 进程内的轻量级任务,是系统中最小的执行单位 |
| 关系 | 独立 | 从属于某个进程,一个进程可有多个线程 |
| 内存 | 用户空间内存私有 | 共享进程的代码段、数据段、堆;栈区私有(默认约 8MB) |
| 开销 | 创建开销大(需分配 0~3GB 虚拟地址空间) | 创建开销小(只需分配栈空间) |
| 适用场景 | 需要大量资源的复杂任务 | 轻量级并发任务 |
✅ 共同点:都支持并发执行。
二、线程编程步骤
- 创建线程
- 在线程函数中执行任务
- 回收线程资源(避免僵尸线程)
三、常用命令(查看线程)
ps -eLf # 查看所有线程(LWP 列为线程 ID)
ps -eLo pid,ppid,lwp,stat,comm # 自定义列:LWP 即线程 ID
LWP(Light Weight Process)= 线程在内核中的 ID
四、核心 pthread 函数
1. pthread_create —— 创建线程
#include <pthread.h>
int pthread_create
(
pthread_t *thread, // 输出:新线程的 ID(需预先定义)
const pthread_attr_t *attr, // 线程属性(通常设为 NULL,表示默认)
void *(*start_routine)(void *) //线程执行函数(函数指针,即“回调函数”)
void *arg // 传递给 start_routine 的参数
);

- 返回值:成功返回
0,失败返回错误码 - 注意:
start_routine是函数名(即函数地址)
2. pthread_self —— 获取当前线程 ID
pthread_t pthread_self(void);
- 返回值:当前线程的 ID(类型
pthread_t,通常等价于unsigned long)
3. pthread_exit —— 主动退出当前线程
void pthread_exit(void *retval);
- 参数:
retval是返回给pthread_join的数据指针 - 注意:确保
retval指向的数据在线程结束后仍可访问(如全局变量或堆内存)
4. pthread_cancel —— 请求取消指定线程
int pthread_cancel(pthread_t thread);
- 参数:目标线程的 ID
- 返回值:成功返回
0,失败返回错误码 - 注意:线程需运行到“取消点”(如
sleep,printf)才会真正退出
五、补充说明
- 栈大小:默认约 8MB,可通过
pthread_attr_t修改 - 线程 ID 类型:
pthread_t通常是unsigned long,但不保证跨平台一致 - 编译链接:必须加
-lpthreadgcc program.c -lpthread
更多推荐

所有评论(0)