我正在尝试编写一个程序,它会分叉另一个进程并保持同步,这样第一个进程就不会开始第(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++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545985.html