多线程独占访问文件

时间:2014-06-29 15:25:35

标签: c linux multithreading pthreads

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

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

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

为缓存中的每个文件创建一个互斥锁显然会起作用,但是文件数量庞大会使这个选项变得过高。使用flockfile和funlockfile似乎是我最好的选择,但是不会使用这些函数迫使我为缓存中的每个文件设置文件描述符?也就是说,我是否有必要首先打开缓存中的所有文件,然后将生成的文件描述符保存在两个线程可访问的缓冲区中?

2 个答案:

答案 0 :(得分:2)

要访问您需要打开它们的文件。

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

答案 1 :(得分:2)

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