如何使用信号量同步进程

假设我有3个进程,包括父进程,我必须按照P3,P1,P2的顺序执行I程序。 伙计们,请帮助我如何从流程P3开始计算。

我需要输出为{0,1,2,3,4,5,.. max}

作为参考我的代码快照是: –

#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}

我需要一种方法,第一个进程应该打印一个数字,它应该让其他进程打印他的数字,并在最后三分之一应该打印。

我需要一种方法,每个都顺序转向。

希望我对这个问题很清楚

这里是如何实现订单P3,P1,P2的伪代码

 //semaphores for P1, P2, P3 respectively semaphore s1=0; semaphore s2=0; semaphore s3=1; //coz P3 needs to go first //for p3 wait(s3) //do p3 here signal(s1) //signal for P1 to start //for p1 wait(s1) //do p1 signal(s2) // signal to start P2 //for p2 wait(s2) //do p2 signal(s3) //signal to start p3 again if that is required or you can omit this if not required