Два процесса записывают в общую память

#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 как разделяемую память, где у меня есть массив и счетчик.

Я думаю, это лучший способ решить эту проблему. Теперь моя программа работает хорошо. Спасибо за комментарии.