文章
119
粉丝
12
获赞
0
访问
15.2k
至多只允许有n-1位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。
emaphore count = n-1; // 可进餐名额数量
semaphore chopsticks[n]; // 所有筷子资源的信号量
for (int i=0; i<n; i++) {
chopsticks[i] = 1;
}
CoBegin
Process 哲学家i() {
while (true) {
思考;
P(count);
P(chopsticks[i]); // 取左边筷子
P(chopsticks[(i+1)%n]); // 取右边筷子
进餐;
V(chopsticks[i]); // 放回左边筷子
V(chopsticks[(i+1)%n]); // 放回右边筷子
V(count);
}
}
CoEnd
登录后发布评论
暂无评论,来抢沙发