0
私はP3、P1、P2の順番でプログラムを実行する必要がある親プロセスを含む3つのプロセスがあるとします。プロセスP3から計算を開始する方法を教えてください。セマフォを使用してプロセスを同期させる方法
私は私のコードのスナップショットは参考のため、{0,1,2,3,4,5、...最大}
としてアウトが必要: -
#define SEM_NAME "//test.mutex"
//#define SEM_NAME2 "//test2.mutex"
int main(int argc, char const *argv[]) {
int max = 0, i =0;
sem_t *sem;
sem_t *sem2;
pid_t pid, pid2;
sem = sem_open(SEM_NAME, O_CREAT, O_RDWR, 1);
sem_unlink(SEM_NAME);
if (sem==SEM_FAILED) {
printf("%s sem_open failed!", SEM_NAME);
return (-1);
}
// sem2 = sem_open(SEM_NAME2, O_CREAT, O_RDWR, 0);
// sem_unlink(SEM_NAME2);
// if (sem2==SEM_FAILED) {
// printf("%s sem_open failed!", SEM_NAME2);
// return (-1);
// }
printf("Enter the maximum number\n");
scanf("%d", &max);
pid = fork();
if(pid == 0)
{
i = 2;
pid2 = fork();
if(pid2 == 0)
{
i = 0;
}
else
{
sleep(2);
}
}
else
{
i = 1;
sleep(1);
}
//do
{
sem_wait(sem);
for (; i <= max;) {
printf("pid %d done and value is %d\n", getpid(),i);
i = i + 3;
}
sem_post(sem);
} //while(i <= max);
wait(NULL);
return 0;
}
私が実行したときプログラム私は次の出力を得ます {0,3、、6,1,4,7,2,5,8}
最初のプロセスで数値を出力する方法が必要です。彼の番号と最後の3分の1が印刷されます。
私はそれぞれが順番に向きを変える方法が必要です。
希望は私は質問で明らかだ