linux进程协作-一个小例子
爸爸给女儿和儿子喂水果。爸爸随机挑选橘子或者苹果,将橘子剥皮或者将苹果削皮放在盘子中,剥皮的速度比较快,而削皮的时间比较慢。女儿只吃橘子,儿子只吃苹果(当然我们假设女儿和儿子永远也吃不饱)。盘子只能装下3个水果。儿子吃得比较快,女儿吃得比较慢。
编程模拟该过程:
简单分析
信号量:
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)
代码: