【问题标题】:C Semaphore Thread read fileC信号量线程读取文件
【发布时间】:2011-10-08 09:21:37
【问题描述】:

我编写代码,其中我有三个线程从文件中读取行,三个线程写入文件。读取行时,它们存储在缓冲区中。当阅读完成时将被激活。我对此进行了尝试,并且我只能使用一个用于读取的线程和一个用于写入的线程来使其工作。目前我很迷茫。 任何帮助都会很棒。

这是我写的代码片段。

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

任何帮助将不胜感激

【问题讨论】:

  • 什么是:bsemaphore_downsemaphore_upisFullisEmptytemptemp2filefile2?你不是唯一一个迷路的人。
  • b 是缓冲区,isFull 是缓冲区已满。 isEmpty,是缓冲区空。 file 是输入文件。
  • 我的意思是,它们是什么类型以及它们是如何以及在哪里定义和使用的?简而言之,您发布的片段太不完整,缺乏足够的上下文,无法让任何人为您提供很多帮助。

标签: c multithreading file semaphore


【解决方案1】:

首先这里很多东西都不清楚,比如各种参数的定义,标志。

从我可以从您的 2 个功能中了解到,您有多个生产者/消费者问题。对于多个消费者(即读者)来说,拥有一个信号量是有意义的。但是在编写时,使用互斥锁来序列化生产者线程更有意义。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 2013-12-12
    • 2018-10-28
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2018-04-11
    相关资源
    最近更新 更多