#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#define N 3
#define Left_chopstick(x) (Chopstick[x])
#define Right_chopstick(x) (Chopstick[((x)+1)%N])
typedef struct{
int pfd[2];
}Semaphore;
Semaphore Chopstick[N];
void simulate_behaviour_of_philosopher(int k);
void Print_an_event(int k, char *event);
void initialize_semaphore();
void P(Semaphore sem);
void V(Semaphore sem);
int main(void)
{
int k,status,l=0,r=0;
initialize_semaphore();
for(k=0;k<N;k++)
printf("Philosopher%2d ",k);
printf("\n");
for(k=0;k<N;k++)
printf("-------------------- ");
printf("\n");
for(k=0;k<N;k++)
{
if(fork()==0)
{
simulate_behaviour_of_philosopher(k);
exit(EXIT_SUCCESS);
}
}
for(k=0;k<N;k++)
wait(&status);
return 0;
}
void simulate_behaviour_of_philosopher(int k)
{
int i;
for(i=0;i<5;i++)
{
P(Left_chopstick(k));
Print_an_event(k,"pick up left stick");
Print_an_event(k," ***thinking***");
sleep(1);
P(Right_chopstick(k));
Print_an_event(k,"pick up right stick");
Print_an_event(k,"***eating***");
sleep(1);
Print_an_event(k,"put down left stick");
V(Left_chopstick(k));
Print_an_event(k,"put down right stick");
V(Right_chopstick(k));
Print_an_event(k," ***thinking***");
sleep(1);
}
}
void Print_an_event(int k,char *event)
{
int i,indentsize;
indentsize=22*k;
for(i=0;i<indentsize;i++)
putchar(' ');
printf("%s\n",event);
}
void initialize_semaphore()
{
int i;
for(i=0;i<N;i++)
{
pipe(Chopstick[i].pfd);
write(Chopstick[i].pfd[1], "x", 1);
}
}
void P(Semaphore sem)
{
char token;
read(sem.pfd[0],&token,1);
}
void V(Semaphore sem)
{
write(sem.pfd[1],"x",1);
}
教えてください
教えてください
今、食事をする哲学者の問題のコードを考えているのですがデッドロックを解消するために資源の確保する絶対的な順位をつけたいのですがどうすればよいのかわからないので教えてください。
Re: 教えてください
誰からも返信が無いようなので記しますが
ルールrulesに則って質問してくださいね。
unix 環境のコードのようでテストができません。この問題は自分で良く考え無いといろんな答えがあるでしょう。
セマフォの使い方は沢山あると思います。
ここなどを参考にしてください。
https://docs.oracle.com/cd/E27069_01/ht ... gepdy.html
ルールrulesに則って質問してくださいね。
unix 環境のコードのようでテストができません。この問題は自分で良く考え無いといろんな答えがあるでしょう。
セマフォの使い方は沢山あると思います。
ここなどを参考にしてください。
https://docs.oracle.com/cd/E27069_01/ht ... gepdy.html