在了解同步与互斥机制之前,我们先得知道进程间的资源访问冲突类型。
1.进程间资源访问冲突的类型
主要有两种:
1.共享变量的访问冲突
2.访问顺序的冲突
解决第一种冲突类型的方式:进程间的互斥
解决第二种冲突类型的方式:进程间的同步
实例理解:
一条食品生产线上,假设A、B、C共同完成一个食品的包装任务,A负责将食品放入盒子中,B、C负责将食品打包。
首先分析,必须是A先装食品,然后B、C再进行打包,A与B、C就形成了同步关系。
再假设打包需要用到刀子,而车间就只有一把刀子,那么这时候B、C就形成了互斥关系。
2.同步
在多任务的操作系统环境下,多个进程会同时运行,并且一些进程可能会存在一定的关联。
多个进程可能会为了完成同一个任务相互协作,这就形成了进程间的同步关系。
比如说进程B 需要从缓冲区读取进程A 产生的信息,当缓冲区为空时,进程B读不到信息,被阻塞。 当进程A产生信息放入缓冲区时,进程B才会被唤醒。
同步经典案例:
3.互斥
在不同进程间,为了争夺有限的系统资源(硬件或软件资源)会进入竞争状态,这就是进程间的互斥关系。
比如进程B需要访问打印机,此时进程打印机已经把访问权限给了B,那么进程B没有资源可访问,被阻塞。 直到进程A不访问打印机时,把访问权限交还给打印机,进程B才能访问。
同步与互斥经典案例:
同步与互斥的存在根源:
——临界资源
临界资源:在同一时刻只允许有限个(通常只有一个)进程可以访问(读)或修改(写)的资源,
通常包括硬件资源(处理器、内存、存储器、以及其他一些外围设备等)
和软件资源(共享代码段、共享结构和变量)
访问临界资源的代码————临界区 临界区本身也被称为临界资源