2011-10-08 106 views
0

我写代码,其中我有三个线程从一个文件中读取行,3个三个线程写入文件。读取行时,它们存储在缓冲区内。阅读完成后将被激活。我已经去了这个,我可以让它只用一个线程阅读和一个线程写作。此刻我很迷茫。 任何帮助将是伟大的。C信号量线程读取文件

这里是我写的代码片段。

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

任何帮助将是非常赞赏

+2

什么是:'b','semaphore_down','semaphore_up','isFull','isEmpty','temp'和'temp2','file','file2'?你不是唯一一个迷失的人。 –

+0

b是缓冲区,isFull是缓冲区满。 isEmpty,是缓冲区空的。文件是输入文件。 – spikestar

+1

我的意思是,他们是什么类型,以及他们如何以及在哪里定义和使用?简单地说,你发布的片段太不完整,缺乏足够的上下文让任何人给你很多帮助。 –

回答

0

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

从我可以从你的2个函数udnerstand,你有多个生产者/消费者的问题。对于多个消费者即读者来说,拥有信号量是有意义的。但是在写作时,拥有一个用于序列化生产者线程的互斥体更有意义。

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