P原语和V原语的含义,如何用PV操作解决同步和互斥 5
2个回答
展开全部
p原语为申请资源
v原语为释放资源
pv操作必须成对出现
通过对信号量的互斥修改
信号量为s,当需要进行互斥的时候s 初值为1(也不是绝对的,但是这个是通常情况)
p操作就是
s-1
如果s>= 0 就使用资源
否则就挂起等待
v操作就是s+1
如果s<=0就唤醒一个正在等待的进程
否则什么都不做
通常临界量的代码都是这样的(互斥)
s = 1
进程1:
p(s)
临界代码
v(s)
进程2:
p(s)
临界代码
v(s)
可以看出来,当又一个进程占领资源的时候,另一个进程被挂起,是不可以访问资源的,完成了互斥
而实现同步的代码是
先设s= 0;(同步信号量)
s' = 1;(互斥信号量)
进程1:
p(s')
临界代码
v(s)
进程2:
p(s)
临界代码
v(s')
可以看到,在第一个进程准备完成之前第二个进程无法使用资源,而在第一个进程准备完成之后,第二个进程消耗掉第一个进程的资源之前,第一个进程也不能再生产资源。
v原语为释放资源
pv操作必须成对出现
通过对信号量的互斥修改
信号量为s,当需要进行互斥的时候s 初值为1(也不是绝对的,但是这个是通常情况)
p操作就是
s-1
如果s>= 0 就使用资源
否则就挂起等待
v操作就是s+1
如果s<=0就唤醒一个正在等待的进程
否则什么都不做
通常临界量的代码都是这样的(互斥)
s = 1
进程1:
p(s)
临界代码
v(s)
进程2:
p(s)
临界代码
v(s)
可以看出来,当又一个进程占领资源的时候,另一个进程被挂起,是不可以访问资源的,完成了互斥
而实现同步的代码是
先设s= 0;(同步信号量)
s' = 1;(互斥信号量)
进程1:
p(s')
临界代码
v(s)
进程2:
p(s)
临界代码
v(s')
可以看到,在第一个进程准备完成之前第二个进程无法使用资源,而在第一个进程准备完成之后,第二个进程消耗掉第一个进程的资源之前,第一个进程也不能再生产资源。
展开全部
p原语为申请资源
v原语为释放资源
pv操作必须成对出现
通过对信号量的互斥修改
信号量为s,当需要进行互斥的时候s
初值为1(也不是绝对的,但是这个是通常情况)
p操作就是
s-1
如果s>=
0
就使用资源
否则就挂起等待
v操作就是s+1
如果s<=0就唤醒一个正在等待的进程
否则什么都不做
通常临界量的代码都是这样的(互斥)
s
=
1
进程1:
p(s)
临界代码
v(s)
进程2:
p(s)
临界代码
v(s)
可以看出来,当又一个进程占领资源的时候,另一个进程被挂起,是不可以访问资源的,完成了互斥
而实现同步的代码是
先设s=
0;(同步信号量)
s'
=
1;(互斥信号量)
进程1:
p(s')
临界代码
v(s)
进程2:
p(s)
临界代码
v(s')
可以看到,在第一个进程准备完成之前第二个进程无法使用资源,而在第一个进程准备完成之后,第二个进程消耗掉第一个进程的资源之前,第一个进程也不能再生产资源。
v原语为释放资源
pv操作必须成对出现
通过对信号量的互斥修改
信号量为s,当需要进行互斥的时候s
初值为1(也不是绝对的,但是这个是通常情况)
p操作就是
s-1
如果s>=
0
就使用资源
否则就挂起等待
v操作就是s+1
如果s<=0就唤醒一个正在等待的进程
否则什么都不做
通常临界量的代码都是这样的(互斥)
s
=
1
进程1:
p(s)
临界代码
v(s)
进程2:
p(s)
临界代码
v(s)
可以看出来,当又一个进程占领资源的时候,另一个进程被挂起,是不可以访问资源的,完成了互斥
而实现同步的代码是
先设s=
0;(同步信号量)
s'
=
1;(互斥信号量)
进程1:
p(s')
临界代码
v(s)
进程2:
p(s)
临界代码
v(s')
可以看到,在第一个进程准备完成之前第二个进程无法使用资源,而在第一个进程准备完成之后,第二个进程消耗掉第一个进程的资源之前,第一个进程也不能再生产资源。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询