【问题标题】:Multithreaded Exclusive Access To Files多线程独占访问文件
【发布时间】:2014-06-29 15:25:34
【问题描述】:

我有一个程序同时运行两个线程(主线程和一个 pthread)。该程序管理本地文件夹上的文件缓存。线程执行以下任务:

  • 线程 0 可以读取文件并将其下载到缓存中;
  • 线程 1 可以读取和写入缓存中的文件。

这意味着我需要确保对缓存中的每个文件的独占访问。问题是,我不知道该怎么做!

为缓存中的每个文件创建一个互斥锁显然是可行的,但是文件的绝对数量使这个选项令人望而却步。使用flockfile 和funlockfile 似乎是我最好的选择,但是使用这些函数不会强迫我为缓存中的每个文件都设置文件描述符吗?也就是说,我不需要先fopen缓存中的所有文件,然后将生成的文件描述符保存在两个线程都可以访问的缓冲区中吗?

【问题讨论】:

    标签: c linux multithreading pthreads


    【解决方案1】:

    要访问这些文件,您仍然需要打开它们。

    flockfile()funlockfile() 的调用只需要放在对文件执行I/O 的调用“周围”。

    【讨论】:

      【解决方案2】:

      缓存可以简单地将文件下载为不同的名称,例如file.partial,完成后,它可以自动将其重命名为file。消费者只会寻找file,因此永远不会看到部分文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-28
        • 2019-01-05
        • 2011-12-14
        • 2012-01-30
        相关资源
        最近更新 更多