linux——线程相关函数
1、线程分离--pthread_detach
函数原型:int pthread_detach(pthread_t thread); 调用该函数之后不需要 pthread_join关键细节:
- 分离后的子线程,执行完毕后会自动回收自身 PCB 资源,避免内存泄漏。
- 一旦设置分离,后续无法再用 pthread_join 等待该线程,否则会报错。
- 适用场景:不需要获取子线程退出状态,只想让子线程后台运行、自动清理。
2、杀死(取消)线程--pthread_cancel
函数原型: int pthread_cancel(pthread_t pthread);- 核心作用:主动取消(杀死)指定的线程,强制终止其执行。
- 使用注意事项:
- 取消线程的前提:被取消的子线程,其执行函数内部必须有 “取消点”。
- 天然取消点:常见系统调用(write、read、printf、sleep 等),执行到这些函数时,会检测是否有取消请求。
- 手动设置取消点:若子线程函数内只有纯计算(如
int a=2; int b=a+3;),无系统调用,需手动添加pthread_testcancel();,否则无法取消线程。 - 取消后效果:线程被取消后,资源需配合 pthread_join 或 pthread_detach 回收。
3、比较两个线程ID是否相等(预留函数) --pthread_equal
函数原型: int pthread_equal(pthread_t t1,pthread_t t2);- 核心作用:判断两个线程 ID(t1 和 t2)是否属于同一个线程(预留常用函数)。
- 关键细节:
- 返回值:相等返回非 0,不相等返回 0(与常规 “相等返回 1、不等返回 0” 略有区别,注意记忆)。
- 适用场景:多线程编程中,需判断当前操作的线程是否为目标线程时使用(避免直接用
==比较,适配不同系统的线程 ID 实现)。
