线程创建与控制

本文只是针对 POSIX 线程库功能接口与知识点的汇总罗列

库         :    /lib64/libpthread.so*
头文件  :    pthread.h


线程创建与控制:


1.线程标识符 pthread_t

此类型定义如下

/usr/include/bits/pthreadtypes.h : typedef unsigned long int pthread_t ;

注:线程有两重身份:1).线程身份;    2).子进程身份(各线程也具有 pid)


2.线程创建

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,

void *(*start_routine) (void *), void *arg);

返回值:0 成功

参数:thread  线程 ID 变量地址,  attr  线程属性结构地址

start_routine  线程入口函数,  arg  线程入口函数的参数列表


3.线程终止退出函数

void pthread_exit(void *retval);

入参为退出状态码保存地址,一般无视传入 NULL


4.线程回收函数

int pthread_join(pthread_t thread, void **retval);

父线程回收子线程时调用,若子线程未退出则挂起等待。

入参为目标线程的 ID 和退出状态,若目标线程被取消,则 PTHREAD_CANCELED 保存在*retval


5.线程分离

int pthread_detach(pthread_t thread);

将子线程分离出去,子线程结束后系统自动回收资源

分离后的子线程不可用 pthread_join 回收(报错返回)


6.线程信号发送

int pthread_kill(pthread_t thread, int sig);

注:线程与进程信号原理一样,但影响范围不同。不可采用进程的信号处理方式对待线程

单一线程收到进程级信号,则影响整个进程


7.线程取消

int pthread_cancel(pthread_t thread);

取消一个线程即终止它,但不是立即结束,而是到下一个取消点到达时

取消点通常位于系统函数中。

人工取消点:void pthread_testcancel(void);

若线程中不存在具有取消点的函数调用,则人工加入取消点函数即可。


8.线程信号屏蔽字

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

此用法与进程信号屏蔽字设置函数 sigprocmask 相似,仅作用范围不同


9.线程 ID 比较函数

int pthread_equal(pthread_t t1, pthread_t t2);

判断两个线程 ID 是否相等


10.获取线程自身 ID

pthread_t pthread_self(void);

返回值为自线程的 ID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值