线程回收以及线程的问题处理

一、线程结束
1.1、pthread_exit 本身表示结束线程

如果用在main函数中 表示结束主线程

主线程结束并不表示进程

此时执行逻辑,主线程执行流结束,进程会在其余线程都结束后,结束

1.2、return 从线程中返回

线程执行函数执行结束,这个等价于调用了phread_exit()也就是说return 的方式一样

所以可以使用return 语句,可以从线程放回结束

3、ptrhead_cancel()

被取消(被别人结束),被另外一个线程结束,或者是说被别人结束(他杀)

int pthread_cancel(pthread_t thread);

被别人发送一个信号结束,这个是他杀,所以cancel相当于kill

功能:发送取消的请求

参数:thread 表示给谁发,要发送的线程的pid 号

返回值

成功返回0

失败返回error number

他只结束他的所请求的信号

注意段错误的原因是

我们在做的过程中,可能还没有做完,发射了一个结束信号,线程没有结束返回的信息,故出现段错误

1.4、exit()

在任何线程中使用eixt,其是结束进程,即进程结束则线程也结束,主线程(main函数)return

都会造成进程结束。

二、线程资源回收

1、pthread_join //需要自己回收 --- 线程的属性 (可结合性),阻塞,一般是子线程在较短时间内运行完

2、 //可分离属性 ------子线程运行很久结束 --- 设置分离属性,系统自动回收

2.1、pthread_detach()

分离一个线程

设置分离的状态,当一个分离的线程资源结束,他的资源自动被系统进行回收,不需要另一个线程等待回收,主线程也不需要关心子线程状态。注意一个线程只能分离一次。

功能:分离线程

参数

thread 要分离的线程

返回值

成功返回0

失败返回error number

一般在创建好之后立马设置分离状态,注意好时机。

一个线程只能分离一次

三、对比 线程 和 进程
3.1、线程 vs 进程

线程 cpu执行的最小单位

进程 资源分配和任务调度基本单位

3.2、各自特点(优缺点)

//1、创建 和 调度

线程

创建速度快

调度速度快

线程的并发程度 更高

time 命令 + 运行的程序名 ,会告诉程序运行的时间

//2.安全性

1、线程

好处:共享了进程的数据空间,在共享数据比较方便

缺点:安全性不好,带来资源竞争 //专门的技术 解决资源竞争 ----互斥 同步

2、进程

进程空间相互独立

好处,安全性好

缺点:

进程之间共享数据不方便,传输数据不方便//进程间通信(管道,信号,共享内存)

eg、子进程写了一个段错误,对父进程的没有影响

段错误相当于发信号,这个信号是对进程所发。

针对实际需要,主要看优点。

四、针对线程的缺点的解决方法
4.1、线程间的资源竞争

共享资源:临界资源

临界区: 访问共享资源(临界资源)那段代码

因为访问公共资源如果互相访问,会产生干扰,可能你还没有做完,另一方来打断处理。

 4.2、解决办法

互斥锁

互斥 排他性 -----要么不访问,要访问就是一次性完整操作 (原子操作)//相当于我们把我们所进行的操作作为一个原语;也就是说一次只能访问一个程序

锁 //

//软件层面上的锁

4.3、锁的执行过程
  • 定义互斥锁:pthread_mutex_t mutex;互斥锁类型 互斥锁变量 
  • /互斥锁 互斥量 pthread_mutex_init();//初始化一把锁初始化锁 尽量放在创建锁之前

  • pthread_mutex_lock();//上锁;加锁 加在要访问临界资源的地方

  • 解锁pthread_mutex_unlock();//解锁临界资源访问完之后
  • 销毁pthread_mutex_destroy();//销毁一把锁销毁的目的是因为我们在用的时候,会浪费使用的资源 

 

4.4、pthread mutex init()

pthread mutex init(*restrict_mutex_pthread mutext ,const pthread mutexattr trestrict attr);//初始化一把锁

功能

初始化互斥锁

参数解读

  1. 第一个就是要初始化的互斥锁变量
  2. 属性
  • //NULL 默认属性 ---普通锁
  • //读写锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值