#c #memory #process #shared
#c #память #процесс #общий
Вопрос:
Я должен решить проблему с двумя производителями и одним консуматом с семафорами и разделяемой памятью в C, Linux. У меня есть три процесса: первый процесс — производитель, второй процесс — производитель, а третий процесс — consument.
Производители считывают из собственных файлов и записывают их в один буфер. Consument должен считывать данные из буфера и записывать в стандартный вывод.
Моя проблема: как во втором производителе записать в буфер правильную позицию? Возможно, я покажу некоторый код: первый производитель:
while( fgets(line, sizeof(line),fp) ){
wait(semid,0);
for(i=0;i<1000 amp;amp; line[i]!='';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 amp;amp; buf[i]!='n'; i ){
printf("%c", buf[i]);
}
signal(semid,0);
Комментарии:
1. Сохраните следующий адрес для записи внутри буфера, в равной степени защищенный вашим семафором.
2. что вы имеете в виду? я не понимаю этого решения
3. Вам также нужно, чтобы [i] был общим; не только buf .
Ответ №1:
Я использую struct как разделяемую память, где у меня есть массив и счетчик.
Я думаю, это лучший способ решить эту проблему. Теперь моя программа работает хорошо. Спасибо за комментарии.