一个理发店由一个有张沙发的等候室和一个放有一张理发椅的理发室组成,没有顾客要理发时,理发师便去睡觉,当一个顾客走进理发店时,如果所有的沙发都已被占用,他便离开理发店,否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成以后,顾客必须付费,直到理发师收费后才能离开理发店。
问:如果有多个理发师,并配有一名收银员,信号量该如何实现这一同步。
理发师与顾客的同步
顾客和收营员的同步
//顾客进程没有whilewait(mutex2);if(count>=N) { signal(mutex2);离开;}else{ count++;signal(mutex2);//进店坐下;wait(empty);离开沙发,坐到理发椅上;wait(mutex2);count--;signal(mutex2);signal(full);正在理发;wait(mutex3);付费;signal(payment);wait(receipt);signal(mutex3);离开;}
//理发师while(true){wait(full);wait(mutex);顾客理发; signal(mutex);signal(empty);}
//收银员while(true){wait(payment);收费; signal(receipt)}
本文发布于:2024-02-01 09:52:47,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170675236935802.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |