嵌入式day28

线程退出

---pthread_exit()

线程结束方式:

1.pthread_exit         //pthread_join

2.从线程执行函数中return         //此时等价于1

3.pthread_cancel         //线程可以被取消

4.任何一个线程调用了exit 或者 主线程main函数return 都会使进程结束

pthread_cancel

发送 取消的请求

参数:

thread         //表示要发送的线程的tid号

返回值:

成功         0

失败         错误码

线程资源回收:

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

2、pthread_detach   //可分离属性 --- 子线程运行很久才结束 --- 设置分离属性(一般为系统回收)

pthread_detach

分离线程

参数:

thread         要分离的线程的tid

返回值:

成功         0

失败         错误码

注:

一般在线程创建好后立即进行分离,以防线程运行过快而在未分离前结束

对比 线程 和 进程

1、线程         CPU执行的最小单位

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

2、各自特点(优缺点)

//1.创建 和 调度

      线程

                创建速度快 调度速度快 //并发程度更高

//2.安全性

      线程

                优点:

                共享了进程的数据空间

                共享数据方面 方便

                缺点:

                安全性不好

                带来资源竞争         //专门的技术解决资源竞争 ---互斥 同步

      进程

                进程空间相互独立

                优点:

                安全性好

                缺点:

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

//3.编程

     线程(多线程)复杂程度高于进程

线程间的资源竞争:

共享资源:临界资源

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

机制: 互斥锁

        互斥 排他性 ---要么不访问 要访问就是一次完整的操作(原子操作)

        锁         //软件层面上的锁

定义互斥锁:

pthread_mutex_t mutex:

互斥锁类型                 互斥锁变量 内核对象

初始化锁:

pthread_mutex_init(); //初始化一把锁

加锁: //加锁加在要访问临界资源的地方

pthread_mutex_lock(); //上锁

解锁: //临界资源访问之后解锁

pthread_mutex_unlock(); //解锁

销毁:

pthread_mutex_destroy(); //销毁一把锁

pthread_mutex_init

初始化互斥锁

参数:

mutex //要初始化的互斥锁变量

attr //属性 NULL 默认属性 --- 普通锁

pthread_mutex_lock()

(阻塞操作)

pthread_mutex_trylock()

(尝试锁,避免陷入死锁)(非阻塞操作)

pthread_mutex_unlock()

参数:

mutex //要操作的那把锁

pthread_mutex_destroy()

销毁互斥锁

参数:

mutex //要销毁的那把锁

死锁产生的必要条件:

1、互斥条件

2、不可剥夺条件

3、请求与保持条件

4、循环等待条件

死锁处理策略:

1、预防死锁

2、避免死锁

3、死锁检测和解除

线程间的顺序问题:

//同步操作         强调的是线程的顺序问题

信号量         //交通信号灯 实现了一种可以让线程间有序访问临界资源的方式

信号量      --- 可以顺序操作的一把锁

-----------------------------------

嵌入式学习第二十八天,今天学习了关于线程的退出以及退出后线程资源的回收,同时也对比了进程与线程之间的关于创建,调度和安全性的优缺点。也学习了关于线程之间的资源竞争问题,面对互斥的线程使用同一全局变量时,需要给线程进行加锁操作,当然加锁后也要进行解锁和锁的销毁。最后讲了死锁的相关知识,要了解死锁产生的四个必要条件以及死锁的应对方法。今天最后复习了前面c语言指针方面的一点知识,发现自己不及时复习之前的知识,遗忘很多,后面还是要对自己薄弱的知识方面进行及时的查漏补缺。后面继续加油吧!

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值