线程的同步和互斥基本概念概述:现在操作系统基本都是多任务的操作系统,同时有大量可以调度的实体在运行 。在多任务操作系统当中 , 同时运行的多个任务可能:
- 都需要访问/使用同一种资源
- 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务
同步和互斥的概念:
- 互斥是要求两个任务不能同时占用资源,会相互排序,必须等待一个线程运行完毕 , 另外一个线程才能过来使用资源 。
- 同步是一种更为复杂的互斥,在互斥的基础上,要求两个任务的执行存在先后顺序 。
- 临界资源: 多线程执行流共享的资源就叫做临界资源
- 临界区: 每个线程内部,访问临界资源的代码,就叫做临界区
- 原子性: 不会被任何调度机制打断的操作,该操作只有两态(无中间态,即使被打断,也不会受影响),要么完成,要么未完成
互斥锁是一种简单的加锁的方法来控制对共享资源的访问 , 互斥锁只有两种状态,即加锁(lock)和解锁(unlock) 。
代码的要求:
- 代码必须要有互斥行为:当代码进入临界区执行时,不允许其他线程进入该临界区 。
- 如果多个线程同时要求执行临界区的代码 , 并且临界区没有线程在执行,那么只能允许一个线程进入该临界区 。
- 如果线程不在临界区中执行,那么该线程不能阻止其他线程进入临界区 。
文章插图
互斥量的接口互斥量其实就是一把锁,是一个类型为pthread_mutex_t 的变量,使用前需要进行初始化操作,使用完之后需要对锁资源进行释放 。
- 初始化互斥量
- 加锁
- 解锁
- 销毁互斥量
- 使用 PTHREAD_ MUTEX_ INITIALIZER 初始化的互斥量不需要销毁
- 不要销毁一个已经加锁的互斥量
- 已经销毁的互斥量,要确保后面不会有线程再尝试加锁
- 加锁的粒度要够小
推荐阅读
- 华为watch3可以使用微信吗_华为watch3有微信吗
- Python 多重继承时metaclass conflict问题解决与原理探究
- 神仙记事录第十二章怎么过
- 嘉峪关到张掖-嘉峪关到张掖多少公里
- 多玩LOL盒子战绩查询 英雄联盟战绩查询在线查询系统
- dnf公会勋章怎么获得(dnf公会传说勋章多久能获得)
- 【多服务场景化解决方案】AR虚拟技术助力智能家装
- 一 Linux--多线程
- pta第二次博客
- 1斤等于多少磅 一斤等于多少磅