有些孩子想要画画,其中有的孩子手上握了一支笔,有的孩子手上拿着一张纸,他们必须同时拿到纸和笔之后才可以开始画画。张老师负责源源不断地提供纸或笔,每次只提供一件并将它放在桌上,如果他放的是笔,则缺笔的孩子可以拿走笔并开始画画;如果他放的是纸,则缺纸的孩子可以拿走纸开始画画。假设桌子上同时存放的纸和笔的数量不受限制。
( 1 )请问这个问题中有哪些进程?
( 2 )请用信号量来解决上述进程的同步问题( 1 )每个孩子是一个进程,张老师也是一个进程。
( 2 )本题中需要设置两个信号量 paper 和 pencil ,它们的初值均赋值为 0 。
张老师对应的算法可描述为:
Teacher(){
while(1){
取一件物品放桌上;
if ( 放的是笔 ) signal(pencil);
else signal(paper);
}
}
已经拥有笔的孩子可共享同一个程序段,其对应的算法可描述为:
Child1(){
wait(paper);
从桌上拿起纸;
开始画画;
}
已经拥有纸的孩子可共享另一个程序段,其对应的算法可描述为:
Child2(){
wait(pencil);
从桌上拿起笔;
开始画画;
}