苹果橘子问题
桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,妈妈向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、妈妈, 儿子、女儿四个并发进程的同步。
设三个信号量is_empty, has_orange, has_apple 分别表示盘子是否为空, 盘子里是否只有橘子, 盘子里是否只有苹果 semaphore is_empty = 1, has_orange = 0, has_apple = 0; void father() { while(1) { p(is_empty); 将苹果放入盘子中; v(has_apple); } } void mother() { while(1) { p(is_empty); 将橘子放入盘子中; v(has_orange); } } void son() { while(1) { p(has_orange); 取出橘子; v(is_empty); } } void daughter() { while(1) { p(has_apple); 取出苹果; v(is_empty); } } void main() { parbegin(father(), monther(), son(), daughter()); }