桌上有个能盛下6块饼干的空盘子,爸爸不停地向盘中放苏打饼干或者威化饼干,儿子不停地从盘中取出威化饼干,女儿不停地从盘中取出苏打饼干,规定三人不能同时从盘中取放饼干,每次取放一个。
主要考互斥信号量
使用类C语言模拟
bool mutex = 1; int soda = 0; int wafer = 0; int choose = 0; int num = 0; void father() { wait(mutex); if(num <= 6) { choose = rand() mod 2; if(choose){soda++;num++;} else {wafer++;num++;} } signal(mutex); } void son() { wait(mutex); if(wafer) wafer--; signal(mutex); } void daughter() { wait(mutex); if(soda) soda--; signal(mutex); }