gpt4 book ai didi

c - 如何使用信号量同步进程

转载 作者:行者123 更新时间:2023-11-30 16:47:42 26 4
gpt4 key购买 nike

假设我有 3 个进程,其中包括一个父进程,我必须按 P3、P1、P2 的顺序执行程序。请大家帮助我如何从进程 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

关于c - 如何使用信号量同步进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43236175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com