用P操作、V操作解决读者/写者问题的正确程序如下:
    Semaphore:S,Sr;
    int rc:
    S=1;Sr=1;rc=0;
    Reader() {
    P(Sr);
    rc=rc+1;
    if(rc==1) then P(S);
    V(Sr);
    read_file();
    P(Sr);
    rc=rc-1;
    if(rc==0) then V(S);
    V(Sr);
    }
    Writer() {
    P(S);
    write_file();
    V(S);
    }
    请回答:
问答题     信号量Sr的作用;
 
【正确答案】Sr用于读者计数rc的互斥信号量;
【答案解析】
问答题     程序中什么语句用于读、写互斥,写、写互斥;
 
【正确答案】if rc==1 then P(S)中的P(S)用于读/写互斥,写者进程中的P(S)用于写、写互斥,读、写互斥。
【答案解析】
问答题     若规定仅允许5个进程同时读,怎样修改程序?
 
【正确答案】程序中增加一个信号量S5,初值为5,P(S5)语句加在读者进程P(Sr)之前,V(S5)语句加在读者进程第2个V(Sr)之后。
【答案解析】
问答题   用信号量和P操作、V操作编写程序:多个读进程和多个写进程共享一个文件。要求:
    (1)写操作只能互斥、独立进行;
    (2)读操作可以同时共享读文件;
    (3)当有写操作请求时,禁止新的读操作;有正在读文件的进程时,在读操作完成后进行写文件操作。
 
【正确答案】设置信号量: readcount:=0,nwriter:=0,swriter:=1,mutex:=1,wrt:=1; 读者:P(swriter); if(nwriter==0) { P(mutex); readcount:=readcount +1; if(readcount==1) P(wrt); V(mutex); V(swriter); } else { V(swriter); block(); } reading; P(mutex); readcount:=readcount-1; if(readcount==0) V(wrt); V(mutex); 写者:P(swriter); nwriter:=nwriter+1; P(wrt); writing; P(swriter); nwriter:=nwriter-1; if(nwriter==0) { wakeup(读者进程); V(swriter); } else { V(wrt); V(swriter); }
【答案解析】
问答题   假设具有5个进程的集合P={P0,P1,P2,P3,P4},系统中有3类资源A、B、C,假设在某时刻有如下状态:
   
【正确答案】首先在题目的初始条件上找安全序列。要想找安全序列,首先给出进程的剩余需求量,也就是在占有部分资源的基础上,还需要多少资源。列表如下: 检查系统剩余资源数(1,4,0),看是否可以一次性满足某个进程的全部剩余需求量。找到P0和P2,则选其一进入安全序列,并假设该进程已完成,然后将进入安全序列的进程所占有的资源回收,再检查是否可以一次性满足某个进程的全部剩余需求量。依次类推,最后如果所有进程都可以进入安全序列,则系统处于安全状态,不会死锁。本题第一问的答案是:当前系统处于安全状态,因为至少可以找到一个安全序列<P0,P2,P1,P3,P4>(答案不定)。 如果系统中可用资源为(0,6,2),则只可满足P3的要求,P3归还后,可满足P4的要求,P4归还后,可满足P0的要求,P0归还后,无法满足P1和P2的要求,即找不到安全序列,因此系统处在不安全状态。
【答案解析】