1

私のプログラムでは、3 つの子プロセスを作成し、同じことを行うように割り当てます。number=0 の場合、プログラムは停止します。親プロセスと子プロセスの間の通信に 2 つのパイプを使用します。

int  a;
int main(void)
{

a=10;
//declare and create 2 pipes
int p1[2], p2[2];
pipe(p1);
pipe(p2);
    int ra;
for(int i=0;i<3;i++)
{   
    pid=fork();
    if(pid==0) 
    {
        close(p1[1]);
        close(p2[0]);
        read(p1[0],&ra,3);

        while(ra>0)
        {

            ra-=1;
            printf("%i a are available, reported by process %i\n",ra,getpid());
            close(p1[0]);
            write(p2[1],&ra,3);

            close(p2[1]);

        }
        break;

    }
    else
    if(pid>0)
    {


    }else
    {
        wait(NULL);

    }

}
  }
 if(pid>0)
{
        close(p1[0]);
        close(p2[1]);
        if(a>0)
        {
            write(p1[1],&a,3);
            close(p1[1]);
        }
        else
            exit(0);
        read(p2[0],&ra,3);
        a=ra;
        close(p2[0]);


}

私の問題は、実行中の子プロセスが 1 つしかなく、a=0 になるまで値を減らしていることです。他のプロセスにはチャンスがありません。どうすれば修正できますか?少し早いですがお礼を

4

1 に答える 1