使用信号量用餐哲学家 (BACI)
Dining philosophers using semaphores (BACI)
我必须使用信号量来解决哲学家就餐问题。在我的代码中,每两个哲学家都拿筷子,其余的都在等待。
我的主函数还有一些错误。你能告诉我如何启动 Chopstick[k] 吗?我是 BACI.
的初学者
binarysem ChopStick[5];
binarysem speak;
void philosopher(int index){
int i,k;
int x;
x=0;
for(i=0;i<k;i++){
cout << "I am philosopher: " << index << " and i am thinking "<< endl;
signal(speak);
if(index % 2 == 0){
wait(ChopStick[index]);
wait(ChopStick[(index+1) % 5]);
}
else{
wait(ChopStick[index]);
wait(ChopStick[(index+1) % 5]);
}
x++;
wait(speak);
cout <<"I am philosopher: "<< index <<" and i eat: "<< x << "times" << endl;
signal(speak);
signal(ChopStick[index]);
signal(ChopStick[(index+1) % 5]);
main(){
int k;
for(k=0;k<5;k++){
initialsem(ChopStick[k],1);
initialsem(speak,1);
}
cobegin
{
philosopher(1); philosopher(2); philosopher(3); philosopher(4); philosopher(5);
}
}
根据 this BACI summary,听起来数组应该像在 C 中一样初始化。所以你会想要这样的东西:
binarysem initialsem[5];
(其中5是数组的长度,binarysem是数组元素的数据类型)
我必须使用信号量来解决哲学家就餐问题。在我的代码中,每两个哲学家都拿筷子,其余的都在等待。
我的主函数还有一些错误。你能告诉我如何启动 Chopstick[k] 吗?我是 BACI.
的初学者binarysem ChopStick[5];
binarysem speak;
void philosopher(int index){
int i,k;
int x;
x=0;
for(i=0;i<k;i++){
cout << "I am philosopher: " << index << " and i am thinking "<< endl;
signal(speak);
if(index % 2 == 0){
wait(ChopStick[index]);
wait(ChopStick[(index+1) % 5]);
}
else{
wait(ChopStick[index]);
wait(ChopStick[(index+1) % 5]);
}
x++;
wait(speak);
cout <<"I am philosopher: "<< index <<" and i eat: "<< x << "times" << endl;
signal(speak);
signal(ChopStick[index]);
signal(ChopStick[(index+1) % 5]);
main(){
int k;
for(k=0;k<5;k++){
initialsem(ChopStick[k],1);
initialsem(speak,1);
}
cobegin
{
philosopher(1); philosopher(2); philosopher(3); philosopher(4); philosopher(5);
}
}
根据 this BACI summary,听起来数组应该像在 C 中一样初始化。所以你会想要这样的东西:
binarysem initialsem[5];
(其中5是数组的长度,binarysem是数组元素的数据类型)