2011-10-08 104 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,你有多個生產者/消費者的問題。對於多個消費者即讀者來說,擁有信號量是有意義的。但是在寫作時,擁有一個用於序列化生產者線程的互斥體更有意義。

如果讓多個生產者線程寫入同一個文件,該文件將會出現亂碼。