爸爸给女儿和儿子喂水果。爸爸随机挑选橘子或者苹果,将橘子剥皮或者将苹果削皮放在盘子中,剥皮的速度比较快,而削皮的时间比较慢。女儿只吃橘子,儿子只吃苹果(当然我们假设女儿和儿子永远也吃不饱)。盘子只能装下3个水果。儿子吃得比较快,女儿吃得比较慢。
编程模拟该过程:
(PS:对于这个例子在另一篇文章里面有它的Java线程实现,请看这里:http://blog.csdn.net/he_qiao_2010/article/details/8948137)
简单分析
信号量:
int accessplate = 1; //表示访问盘子的信号量
int apple = 0; //苹果个数
int orange = 0; //橘子
int emptyplates = 3; //空盘子
Father: P(emptyplates); produce a fruit if( is apple ) then P(accessplate) put apple in V(apple) V(accessplate) else P(accessplate) put orange in V(orange) V(accessplate) |
Boy: P(apple) P(accessplate) get an apple eat an apple V(emptyplates) V(accessplate)
|
Girl: P(orange) P(accessplate) get an orange eat an orange V(emptyplates) V(accessplate)
|
代码: