Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对文件的多线程独占访问_C_Linux_Multithreading_Pthreads - Fatal编程技术网

C 对文件的多线程独占访问

C 对文件的多线程独占访问,c,linux,multithreading,pthreads,C,Linux,Multithreading,Pthreads,我有一个程序,有两个线程同时运行(主线程和一个pthread)。此程序管理本地文件夹上的文件缓存。线程执行以下任务: 线程0可以从缓存中读取文件并将其下载到缓存中 线程1可以读取和写入缓存中的文件 这意味着我需要确保以独占方式访问缓存中的每个文件。问题是,我不知道怎么做 显然,为缓存中的每个文件创建互斥锁是可行的,但是文件的数量太多,这使得这个选项无法实现。使用flockfile和funlockfile似乎是我的最佳选择,但使用这些函数不会迫使我为缓存中的每个文件都设置文件描述符吗?也就是说

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

  • 线程0可以从缓存中读取文件并将其下载到缓存中
  • 线程1可以读取和写入缓存中的文件
这意味着我需要确保以独占方式访问缓存中的每个文件。问题是,我不知道怎么做


显然,为缓存中的每个文件创建互斥锁是可行的,但是文件的数量太多,这使得这个选项无法实现。使用flockfile和funlockfile似乎是我的最佳选择,但使用这些函数不会迫使我为缓存中的每个文件都设置文件描述符吗?也就是说,我是否需要首先打开缓存中的所有文件,然后将生成的文件描述符保存在两个线程都可以访问的缓冲区中?

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


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

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


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

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

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