多线程-线程控制

线程概念

概念:线程是进程中的一条执行流,是cpu执行调度的基本单位。
进程:进程是一个pcb,一个程序动态运行的描述,通过这个描述可以实现操作系统对程序运行的调度管理。在Linux下是task_struct结构体

在学习线程这里:线程是进程的一条执行流,一个进程中可以有多个·pcb,Linux下的线程执行流,是通过pcb是实现,且一个进程中可能有多个pcb,并且这些pcb共享同一个进程中大部分资源,相较于传统pcb更加轻量化,因此也被称为轻量级进程

线程是cpu调度的基本单位,进程是系统进行资源分配的基本单位

线程的共享与独有:
共享:虚拟地址空间(代码段和数据段),文件描述符表,信号处理方式,工作路径。
独有:栈、寄存器、信号屏蔽字、优先级、errno、线程标识符-ID

多线程多进程进行多任务处理的优缺点:

1.共享虚拟地址空间,因此线程间通信间更加灵活(还可以通过全局变量,函数传参)
2.线程的创建和销毁的成本更低
3.同一个进程间的线程调度切换成本更低
缺点:
1.健壮性低,有些系统调用和异常是针对整个进程产生,一个进程退出会使整个进程间的所有线程都要退出
== 共同优点:==
在cpu资源足够的情况下都可以实现并行的任务处理,提高效率

大多数情况下都是使用多线程比较好,但是在稳定性要求高的场景中使用多进程比较好

线程控制

线程控制:线程的基本操作–创建、终止、等待、分离。
操作系统并没有提供线程操作的系统调用接口,大佬们封装了一套线程的库函数,我们的操作线程的接口都是库函数。

线程的创建
int pthread_create(pthread_t *tid,pthread_attr_t *attr
void*(*start_routine)(void*),void* arg)
tid:用户获取创建的线程id  attr:线程属性--通常置为null
star_routine:线程的入口函数  arg:通过线程入口函数给线程传递的参数

返回值:成功返回0,失败返回非0

线程的终止:
1.线程入口函数中执行return(线程入口函数运行完毕,线程就会退出)
2.使用库函数void pthread_exit(void * retval)
retval:作为线程退出的返回值,可以在任意位置,那个线程调用就会退出哪个
3.使用库函数int pthread_cancel(pthread_t tid);
tid:一个指定线程的id;取消一个线程,传入谁的id就退出谁;线程的退出返回值是:PTHREAD_CANCELED

线程的等待:线程默认情况下,退出后,资源不会被回收,需要其他的线程等待,获取推出线程的·返回值,释放资源。
int pthread_join(pthread_t tid,void **retval)阻塞接口
线程不是必须被等待,线程属性中,有一个分离属性–默认值为joinable,处于joinable状态的线程退出后不会自动释放资源,需要被等待

线程的分离:设置线程的分离属性为detach属性,属于detach属性的线程,退出后自动释放资源,不需要等待
注意:只有当程序员不关心线程返回值时,并且也不想等待线程退出的时候才会分离属性
int pthread_detach(pthread_t tid);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值