1、同步与互斥
同步是并发进程互相共享对方的“私有资源”
举例:读写操作,A将数据读入缓冲区,B从缓冲区中读取数据。只有A将数据读入缓冲区,B才能获得读取数据的机会。这个是有顺序的。
互斥是共享资源引起的临界区不允许并发进程交叉执行的现象。
举例:打印机,AB要打印东西,A和B假设同时发出请求,打印机只有一个,A打印的时候B就不能打了,但你不能确定是A打印还是B打印。
互斥其实是一种实现同步的一种机制吧。
2、信号量机制 :信号量可以解决互斥问题和同步问题。
1 一整形变量
2 每个信号量表示一种系统资源的状况,其值表示该资源当前可用的数量
3 每个信号量代表一个空的或非空等待队列
4 对信号量只能实施P、V操作,只有P、V操作才能改变其值
5 对应于wait操作和signal操作
3、利用PV操作实现进程的互斥
令信号量mutex的初值为1,当进入临界区时执行P操作,退出临界区时执行V操作。这样利用PV操作实现进程互斥的代码段如下:
P(mutex)
临界区
V(mutex)
4、利用PV操作实现进程的前驱关系
5、练习
若wait、signal操作的信号量S初值为2,当前值为 -1,则表示有( )个等待进程。
A.0 B.1 C.2 D.3
解析:S初值是2,代表此进程拥有两个资源,进行一个P操作,申请资源,S--;当S<0,则进入等待队列,现在S=-1,则有一个进程在等待队列。选B
若有4个进程共享同一程序段,每次允许3个进程进入该程序段,用wait\signal操作作为同步机制。则信号量S的取值范围是()。
A.4,3,2,1,0
B.3,2,1,0,-1
C.2,1,0,-1,-2
D.1,0,-1,-2,-3
解析:有四个进程共享程序段,允许三个进程进入程序段代表信号的初值应该是3,因为他只允许三个进程,如果是4,根据P操作,S--,只有当S<0
的时候才会停止,那么进入程序段的就不止三个的,所以S==3。选B
有9个生产者,6个消费者,共享容量为8的缓冲区。在这个生产者-消费者问题中,互斥使用缓冲区的信号量mutex的初值应该为( )。
A 1 B 6 C 8 D 9
解析:mutex一般都是1,互斥的话可以理解为可以运行和不可以运行两种状态,取值是1 0 -1,没有其他情况,选A
信号量S的初值为8,在S上执行了10次P操作,6次V操作后,S的值为( )。
A 10 B 8 C 6 D 4
解析:选D,8-10+6=4
任何两个并发进程之间存在着( )的关系。
A.各自完全独立 B.拥有共享变量 C.必须互斥 D.可能相互制约
解析:进程具有的特点之一,并发性,异步性,独立性,动态性(* 最重要);进程本来就是并发的,这就是他的一个特性。A是一个混淆的选项比较难,进程的独立性体现在他能够独立运行,独立接收资源和独立调度,他们的资源还是可以共享的,A中的完全独立有点不大准确,很不准确。B中的拥有共享变量,错,有些变量可以共享,但有些不行,比如不可重用的资源没办法共享,C进程必须互斥有点扯了,选D