4

我有一个在 Windows 和 Linux 上运行的应用程序。它创建一个文件,写入文件,然后调用 fclose()。在一段不确定的时间之后,文件的名称被发送到另一个线程。另一个线程使用 fopen() 打开文件并读取其内容。

一位用户报告应用程序在 Debian 6 上失败,除非他在打开文件之前创建了短暂的延迟。

当 fclose() 被调用并返回时,文件通过 fopen() 对其他线程可用的速度有多快?

4

2 回答 2

3

您的问题有点模棱两可,所以我将尝试回答几种解释。

如果您的问题是多久之后fclose可以再次访问该文件,那么答案很简单,任何时候都可以,甚至在之前。POSIX 不允许文件打开是互斥的;只要您不达到系统打开文件的限制,就可以多次打开文件。即使您在具有伪POSIX线程实现的Windows等不合格平台上,只要在之后排序,您就可以了,因为底层关闭操作必须在返回之前完成。fopenfclosefopenfclosefclose

另一方面,如果您担心一个线程写入的数据是否可供另一个线程读取,那么只要您可以在刷新之间建立“先发生”关系(显式通过fflush或作为fclose操作的一部分) ) 在其他地方写入数据和读取,你很好。任何 pthread 同步功能,例如使用互斥锁或pthread_join,都足以建立这种关系。

于 2013-06-14T01:43:39.710 回答
-1

fclose() 由 libc 提供,因此实现可能在不同的平台/操作系统上有所不同,我怀疑是否有办法在 fclose() 被触发并返回后检测文件的可用性。也许您可以设置延迟参数并针对不同的客户端进行调整。

于 2013-06-13T18:26:27.477 回答