c/c++开发分享运行信号量的意外输出

我正在尝试编写一个程序,它会分叉另一个进程并保持同步,这样第一个进程就不会开始第(i)次迭代,直到第二个进程完成第(i-1)次迭代。 这只能使用两个信号量吗? 这是我到目前为止:

#include  #include  #include  #include  #include  #include  sem_t semA, semB,sem,m; int main(void) { int i; pid_t child_a, child_b,pid2,pid3; sem_init(&semA, 0, 1); sem_init(&semB, 0, 0); sem_init(&m, 0, 0); child_a = fork(); //wait(); if (child_a == 0) { // int j; pid2 =getpid(); for (i = 0; i < 5; ) { sem_wait(&semA); //sem_wait(&m); printf("child1: %dn", i); i++; //printf("pid1: %dn", pid2); //printf("--------------------------n"); sleep(3); //sem_post(&m); sem_post(&semB); } } else { child_b = fork(); //wait(); if (child_b == 0) { pid3 =getpid(); for (i = 0; i < 5;) { sem_wait(&semB); //sem_wait(&m); printf("child2: %dn", i); i++; //printf("pid2: %dn", pid3); //printf("--------------------------n"); sleep(5); //sem_post(&m); sem_post(&semA); } } } exit(0); return 0; } 

我期望的输出是:

 child1: 0 child2: 0 child1: 1 child2: 1 child1: 2 child2: 2 child1: 3 child2: 3 child1: 4 child2: 4 child1: 5 child2: 5 child1: 6 child2: 6 child1: 7 child2: 7 child1: 8 child2: 8 child1: 9 child2: 9 

但我只有一个孩子:

 child1: 0 

    您可能需要three semaphores

    sem1 sem2 sem3

    处理1:

     if(FirstRun){ Initialize the semaphores wait for sem2 } post sem1 wait for sem3 

    过程2:

     if(FirstRun){ Initialize the semaphores post sem2 } wait for sem1 post sem3 

    注意 :在Initialize the semaphores您必须将信号量映射到shared memory以便两个进程都可以访问它。 还要将它们初始化为某个默认值0, 0, 0

      以上就是c/c++开发分享运行信号量的意外输出相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545985.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注