我有一个程序,它有两个同时运行的线程(主线程和一个pthread)。此程序管理本地文件夹上的文件缓存。线程执行以下任务:
这意味着我需要确保对缓存中的每个文件进行独占访问。问题是,我不知道怎么做!
为缓存中的每个文件创建一个互斥锁显然会起作用,但是文件数量庞大会使这个选项变得过高。使用flockfile和funlockfile似乎是我最好的选择,但是不会使用这些函数迫使我为缓存中的每个文件设置文件描述符?也就是说,我是否有必要首先打开缓存中的所有文件,然后将生成的文件描述符保存在两个线程可访问的缓冲区中?
答案 0 :(得分:2)
要访问您需要打开它们的文件。
对flockfile()
和funlockfile()
的调用只需要放在对文件进行I / O调用的“周围”。
答案 1 :(得分:2)
缓存可以简单地将文件下载到其他名称,例如file.partial
,当它完成后,它可以原子地将其重命名为file
。消费者只会查找file
,因此永远不会看到部分文件。