我目前正在“操作系统概念10 / e”之后进行一些锻炼 同步部分,这是我困惑的练习的解决方案。
6.25考虑一个由进程P1,P2,...,Pn组成的系统,每个进程都有唯一的优先级编号。编写一个监视器,使用优先级数字确定分配顺序,以将三个相同的行式打印机分配给这些进程。
手册给出了伪代码解决方案:
var figure = $(".video").mouseenter( hoverVideo );
function hoverVideo(e) {
$('video', this).get(0).play().show();
}
var figure = $(".video").mouseleave( hideVideo );
function hideVideo(e) {
$('video', this).load().hide();
}
我的问题是:
考虑以下情况:
如果有五个进程P1,P2,P3,P4,P5都希望使用打印机,则假定每个进程的优先级数关系为P1 x=[10,20,30,40,50]
y=[1,0,1,0,1]
colors = ["seagreen" if i == 1 else "red" for i in y]
plt.scatter(x, y, color=colors)
plt.show()
,但是如果P1,P2,P3仍在使用打印机时P4也呼叫 monitor printers {
int num_avail = 3;
int waiting_processes[MAX_PROCS];
int num_waiting=0;
condition c;
void request_printer(int priority_number) {
if (num_avail > 0) {
num_avail--;
return;
}
waiting_processes[num_waiting] = priority_number;
num_waiting++;
sort(waiting_processes);
while (num_avail == 0 && waiting_processes[0] != priority_number)
c.wait();
waiting_processes[0] = waiting_processes[num_waiting-1];
num_waiting--;
sort(waiting_processes);
num_avail--;
}
void release_printer() {
num_avail++;
c.broadcast();
}
}
从上面的代码中,我们可以看到对request_printer(priority_of_Pi)
数组进行排序之后,num_avail==0
是P4,因此P4将能够离开检查循环,而无需等待{ {1}}语句,并且将导致request_printer()
,因此现在waiting_processes
和P4可以使用打印机,而P1,P2,P3仍在使用打印机,如果P5调用{{1} }现在以来,由于waiting_processes[0]
P5还能够离开检查循环c.wait()
并使用打印机,这意味着出现了竞争状况。
考虑一下我认为的情况,解决方案是否错误,或者我想错了什么?
如果解决方案有误,该如何解决?
非常感谢您!