我必须在C,Linux中使用信号量和共享内存来解决问题两个生产者和一个消耗品。 我有三个过程:第一个过程是生产者,第二个过程是生产者,第三个过程是消费。
生产者正在从自己的文件中读取并将其写入一个缓冲区。 Consument必须从缓冲区读取并在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);
答案 0 :(得分:0)
我使用struct作为共享内存,我有数组和计数器。
我认为这是解决这个问题的最好方法。现在我的计划运作良好。感谢您的评论。