C Семафор Нить читать файл - PullRequest
0 голосов
/ 08 октября 2011

Я пишу код, в котором у меня есть три потока, которые читают строки из файла, и 3 три потока, которые пишут в файл.Когда строки читаются, они хранятся в буфере.после завершения чтения будет активирован.Я попробовал это, и я могу заставить его работать только с одним потоком для чтения и одним для потока для записи.На данный момент я довольно потерян.Любая помощь была бы отличной.

Вот фрагменты кода, который я написал.

void *read_file(void *arg)
{
   semaphore_down(&sem_write);

   while(fgets(temp, MAX_BUFFER, file) != NULL)
   {    
    if(!isFull(&b))
    {
        printf("ADDING\n");
        read(&b,temp);
    }

}

    semaphore_up(&sem_read);
}       

void *write_file(void *arg)
{

    semaphore_down(&sem_read);
while(!isEmpty(&b))
{
    write(&b,&temp2);
    fprintf(file2, "%s", temp2);
}
semaphore_up(&sem_write);
}

Любая помощь будет очень цениться

1 Ответ

0 голосов
/ 08 октября 2011

Прежде всего, здесь неясно многие вещи, такие как определения различных параметров и флагов.

Из того, что я могу понять из ваших двух функций, у вас есть проблема с несколькими производителями / потребителями. Для нескольких потребителей, то есть читателей, имеет смысл иметь семафор. Но во время записи имеет смысл иметь мьютекс для сериализации потоков производителей.

Если вы разрешите нескольким потокам производителя писать в один и тот же файл, файл будет искажен.

...