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,缓冲区为空。文件就是输入文件。我的意思是,它们是什么类型的,它们是如何定义和使用的?简单地说,您发布的片段太不完整,缺乏足够的上下文,任何人都无法给您提供帮助。