我有一个在 Windows 和 Linux 上运行的应用程序。它创建一个文件,写入文件,然后调用 fclose()。在一段不确定的时间之后,文件的名称被发送到另一个线程。另一个线程使用 fopen() 打开文件并读取其内容。
一位用户报告应用程序在 Debian 6 上失败,除非他在打开文件之前创建了短暂的延迟。
当 fclose() 被调用并返回时,文件通过 fopen() 对其他线程可用的速度有多快?
我有一个在 Windows 和 Linux 上运行的应用程序。它创建一个文件,写入文件,然后调用 fclose()。在一段不确定的时间之后,文件的名称被发送到另一个线程。另一个线程使用 fopen() 打开文件并读取其内容。
一位用户报告应用程序在 Debian 6 上失败,除非他在打开文件之前创建了短暂的延迟。
当 fclose() 被调用并返回时,文件通过 fopen() 对其他线程可用的速度有多快?
您的问题有点模棱两可,所以我将尝试回答几种解释。
如果您的问题是多久之后fclose
可以再次访问该文件,那么答案很简单,任何时候都可以,甚至在之前。POSIX 不允许文件打开是互斥的;只要您不达到系统打开文件的限制,就可以多次打开文件。即使您在具有伪POSIX线程实现的Windows等不合格平台上,只要在之后排序,您就可以了,因为底层关闭操作必须在返回之前完成。fopen
fclose
fopen
fclose
fclose
另一方面,如果您担心一个线程写入的数据是否可供另一个线程读取,那么只要您可以在刷新之间建立“先发生”关系(显式通过fflush
或作为fclose
操作的一部分) ) 在其他地方写入数据和读取,你很好。任何 pthread 同步功能,例如使用互斥锁或pthread_join
,都足以建立这种关系。
fclose() 由 libc 提供,因此实现可能在不同的平台/操作系统上有所不同,我怀疑是否有办法在 fclose() 被触发并返回后检测文件的可用性。也许您可以设置延迟参数并针对不同的客户端进行调整。