C信号量线程读取文件

C信号量线程读取文件,c,multithreading,file,semaphore,C,Multithreading,File,Semaphore,我编写代码时,有三个线程从文件中读取行,有三个线程向文件中写入行。读取这些行时,它们存储在缓冲区中。当读取完成时,将激活。我已经尝试过了,我能够让它只工作一个线程用于阅读,一个线程用于写作。现在我很迷茫。 任何帮助都会很好 下面是我编写的代码片段 void *read_file(void *arg) { semaphore_down(&sem_write); while(fgets(temp, MAX_BUFFER, file) != NULL) {

我编写代码时,有三个线程从文件中读取行,有三个线程向文件中写入行。读取这些行时,它们存储在缓冲区中。当读取完成时,将激活。我已经尝试过了,我能够让它只工作一个线程用于阅读,一个线程用于写作。现在我很迷茫。 任何帮助都会很好

下面是我编写的代码片段

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);
}

非常感谢您的帮助

首先,这里有很多东西不清楚,例如各种参数的定义和标志

从你的两个函数中我可以看出,你有多个生产者/消费者的问题。对于多个消费者,即读卡器,有一个信号量是有意义的。但是在写的时候,有一个互斥来序列化生产者线程更有意义


如果让多个生产者线程写入同一个文件,该文件将被乱码。

什么是:
b
semaphore\u down
semaphore\u up
已满
isEmpty
temp
temp2
文件
file2
?你不是唯一一个迷路的人。b是缓冲区,isFull是缓冲区已满。isEmpty,缓冲区为空。文件就是输入文件。我的意思是,它们是什么类型的,它们是如何定义和使用的?简单地说,您发布的片段太不完整,缺乏足够的上下文,任何人都无法给您提供帮助。