我必须解决C,Linux中带有信号灯和共享内存的两个生产者和一个消耗者的问题。
我有三个过程:第一个过程是生产者,第二个过程是生产者,第三个过程是消耗者。

生产者正在从自己的文件读取并将其写入一个缓冲区。耗材必须从缓冲区读取并写入stdout。

我的问题是:如何在第二个生产者中写缓冲到适当的位置?
我可能会显示一些代码:
第一生产者:

    while( fgets(line, sizeof(line),fp) ){

    wait(semid,0);

for(i=0;i<1000 && line[i]!='\0';i++){
        buf[i]=line[i];
    }
signal(semid,1);


}

fclose (fp); // close file


signal(semid,1);


第二个生产者是相同的(信号量除外)...如何在缓冲区中的适当位置写入(第一个生产者之后)?

消费者:

while(1){
    wait(semid,2);
    printf("\n Proces K: ");
    for (i=0; i<1000 && buf[i]!='\n'; i++){
        printf("%c", buf[i]);
    }



    signal(semid,0);

最佳答案

我使用struct作为共享内存,其中有数组和计数器。

我认为这是解决此问题的最佳方法。现在我的程序运行良好。感谢您的评论。

关于c - 两个进程写入共享内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24345535/

10-12 16:09