使用信号量的餐饮哲学家(BACI)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用信号量的餐饮哲学家(BACI)相关的知识,希望对你有一定的参考价值。

我必须通过使用信号量来解决餐饮哲学家的问题。在我的代码中,每一位哲学家都拿着一根筷子,其余的都在等待。

我在main函数中仍然有一些错误。你能告诉我如何发起筷子[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是数组元素的数据类型)

以上是关于使用信号量的餐饮哲学家(BACI)的主要内容,如果未能解决你的问题,请参考以下文章

erlang和餐饮哲学家的并发[重复]

餐饮哲学家 Java

餐饮哲学家问题中的饥饿

HTML5期末大作业:餐饮美食网站设计——咖啡(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 咖啡网页设计 美食餐饮网页设计...(代码片段

操作系统第6次实验报告:使用信号量解决进程互斥访问

操作系统第6次实验报告:使用信号量解决进程互斥访问