进程同步之互斥
2018-03-27 15:57
309 查看
进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。而互斥和同步之间存在联系所以,这里先引入互斥概念。
临界区:把不允许多个并发进程交叉执行的一段程序称为临界区(critical region)或临界部分(critical section)。
不可独占:并发进程中的某个进程不在临界区时,它不能阻止其他进程进入临界区。
互斥使用:并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入。
有限等待:并发进程中的某个进程从申请进入临界区时开始,应在有限时间内得以进入临界区。
sem >= 0时,代表可供并发进程使用的资源实体数;
sem < 0时,表示正在等待使用临界区的进程数。
P、V原语
信号量的数值仅能由P、V原语操作改变。采用P、V原语,可以把类名为S的临界区描述为:When S do P(sem) 临界区 V(sem) od。
一次P原语操作使信号量sem减1
一次V原语操作使信号量sem加1
P原语操作:sem减1;
若sem减1后仍大于或等于0,则P原语返回,该进程继续执行;
若sem减1后小于0,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作:sem加1;
若相加结果大于0,V原语停止执行,该进程返回调用处,继续执行;
若相加结果小于或等于0,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转进程调度。
P原语操作流程 V原语操作流程
由上分析可知:只要把临界区置于P(sem)和V(sem)之间,即可实现进程之间的互斥。
设sem为互斥信号量,其取值范围为(1,0,-1)。其中sem=1表示进程PA和PB都未进入类名为S的临界区,sem=0表示进程PA或PB已进入类名为S的临界区,sem=-1表示进程PA和PB中,一个进程已进入临界区,而另一个进程等待进入该临界区。
1、概念
进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。2、原因
由于进程具有独立性和异步性等并发特征,计算机的资源有限,导致了进程之间的资源竞争和共享,也导致了对进程执行过程的制约。
临界资源:把一次(一段时间内)仅允许一个进程使用的资源称为临界资源。临界区:把不允许多个并发进程交叉执行的一段程序称为临界区(critical region)或临界部分(critical section)。
3、互斥准则:
平等竞争:不能假设各并发进程的相对执行速度。即各并发进程享有平等地、独立地竞争共有资源的权利,且在不采取任何措施的条件下,在临界区内任意指令结束时,其他并发进程可以进入临界区。不可独占:并发进程中的某个进程不在临界区时,它不能阻止其他进程进入临界区。
互斥使用:并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入。
有限等待:并发进程中的某个进程从申请进入临界区时开始,应在有限时间内得以进入临界区。
4、实现互斥
1、加锁:对临界区加锁以实现互斥。当某个进程进入临界区后,它将锁上临界区,直到它退出临界区为止。并发进程在申请进入临界区时,首先测试该临界区是否上锁。 2、信号量:在操作系统中,信号量sem是一个整数。sem >= 0时,代表可供并发进程使用的资源实体数;
sem < 0时,表示正在等待使用临界区的进程数。
P、V原语
信号量的数值仅能由P、V原语操作改变。采用P、V原语,可以把类名为S的临界区描述为:When S do P(sem) 临界区 V(sem) od。
一次P原语操作使信号量sem减1
一次V原语操作使信号量sem加1
P原语操作:sem减1;
若sem减1后仍大于或等于0,则P原语返回,该进程继续执行;
若sem减1后小于0,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作:sem加1;
若相加结果大于0,V原语停止执行,该进程返回调用处,继续执行;
若相加结果小于或等于0,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转进程调度。
P原语操作流程 V原语操作流程
由上分析可知:只要把临界区置于P(sem)和V(sem)之间,即可实现进程之间的互斥。
设sem为互斥信号量,其取值范围为(1,0,-1)。其中sem=1表示进程PA和PB都未进入类名为S的临界区,sem=0表示进程PA或PB已进入类名为S的临界区,sem=-1表示进程PA和PB中,一个进程已进入临界区,而另一个进程等待进入该临界区。
相关文章推荐
- 一起talk C栗子吧(第九十九回:C语言实例--进程的同步与互斥)
- 进程-线程-同步-互斥
- linux内核中多进程(线程)间同步和互斥
- 进程同步与互斥
- 进程的互斥与同步
- Linux 进程与线程的同步与互斥
- Android进程线程之同步互斥(一)
- 一个PV操作题引发的思考,如何看待进程间同步、互斥
- 线程(进程)的同步与互斥实例
- Android ContentProvider支持跨进程数据共享与"互斥、同步"杂谈
- 进程的PV操作及互斥同步实现
- 进程的同步与互斥
- 用信号量解决进程的同步与互斥探讨【持续更新】
- Linux 进程管理剖析: Linux 同步方法剖析 内核原子,自旋锁和互斥锁
- Android进程之间同步互斥
- 一个PV操作题引发的思考,如何看待进程间同步、互斥
- Windows中进程同步互斥
- windows进程同步互斥
- 操作系统课程设计-线程和进程的同步与互斥
- 如何用PV原语实现进程间的互斥与同步(转载)