发布网友 发布时间:2022-04-21 23:24
共1个回答
热心网友 时间:2023-07-26 14:11
在用信号量机制解决同步问题时,往往比较繁琐,采用面向对象的思想,将资源及资源的共享操作封装起来,用管程来管理,实现哲学家进餐问题,使用起来更加方便。
算法实现描述如下:
1)建立管程
monitor PC
{
semaphore chopstick[5]=11,1,1,1,1);
X:condition;/*定义条件变量*/
void Get:(int T) /*定义取筷子过程*/
{
Tf chopstick[I]=1 and chopstick[(i+1)%5]=1 then
get the chopstick[I]and chopstick[(i+1)%5];
else X.wait;/*左右筷子没有,则等待*/
)
void Put(int i) /*定义放下筷子过程*/
{
put:the chopstick[I]and chopstick
(i+1)%5];
Tf X.quene then X.signal;/*唤醒等待筷子的哲学家*/
)
}
2)使用管程
第1个哲学家的活动:
void philosopher(int I)
{
while(true)
{
思考;
get:(I);
进餐;
put(I);
} }