我有一个在Windows和Linux上运行的应用程序.它创建一个文件,写入它,并调用fclose().在一些不确定的时间之后,文件的名称被发送到另一个线程.另一个线程使用fopen()打开文件并读取其内容.
一个用户报告Debian 6上的应用程序失败,除非他在打开文件之前创建了一个短暂的延迟.
当调用fclose()并返回时,通过fopen()将文件提供给其他线程的速度有多快?
解决方法:
你的问题有点含糊不清,所以我会尝试回答几种解释.
如果你的问题是在fclose之后多久可以再次打开文件,那么答案很简单,即使在fclose之前,它也是可能的. POSIX不允许文件打开互斥;只要您没有达到系统打开文件限制,就可以根据需要多次打开文件.即使您使用伪POSIX线程实现在Windows之类的不合格平台上,只要在fclose之后对fopen进行排序,您就可以了,因为底层关闭操作必须在fclose返回之前完成.
另一方面,如果您关心的是一个线程写入的数据可供另一个线程读取,那么只要您可以在刷新之间建立“先发生”关系(通过fflush明确地或作为其一部分) fclose操作)写入数据和其他地方的读取,你没事.任何pthread同步函数(如使用互斥锁或pthread_join)都足以建立这种关系.