操作系统课堂笔记三

1.读者与写者问题
读者优先的关键
若读者先占有互斥信号量,只有最后一个读者离开,计数降为0时才释放信号量,导致写者弱势
写者优先同上述方法:写者先占有某信号后,直到最后一个写者走完才释放该信号,读者才能进入。
 增加一个互斥信号量S,读者和写者都争抢该信号;
 对写者也进行计数,第1个写者申请S,其他写者不需要申请S;最后一个写者离开时才释放信号量S.
 一旦写者先申请到了S,则所有的读者只能等待写者都走完才可进入共享读。而多个写者通过S后,仍要争抢wmutex信号以完成互斥的写入。

操作系统课堂笔记三
2.黑白棋子问题
 两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。给出两种情况的解决办法:
 1)执黑子一方先下
2)双方都可以先下,谁先抢到棋盘谁先下。然后开始轮流下子。
执黑子一方先下
信号量:b=1,w=0
黑:
while(没结束){
wait(b);
下一黑棋;
signal(w);
}
白:
while(没结束){
wait(w);
下一白棋;
signal(b);
}
先抢到棋盘者先下,然后轮流下子
问题分析:
 无法用单纯的信号量操作完成,因为初始值无法设置固定值。
 争抢棋盘需要一个互斥信号m;加入if控制与标志判断。利用互斥信号量与特殊标志变量的结合使用实现有序控制。
Semaphore m=1;
turn=0;

while(没结束){
p(m);
if (turn<>2)
下一黑子;
turn=2;
v(m)
}
白:
while(没结束){
p(m);
if (turn<>1)
下一白子;
turn=1;
v(m)
}