0

我怀疑一个 perl 进程正在写入一个文件,而同一个文件正在被 java 线程读取。假设如果该线程在 perl 进程正在写入该文件时访问该文件以读取它,那么线程将进入等待状态或将能够读取它。然后它进入等待状态,它将返回到运行状态还是将永远进入等待状态。实际上 2 个不同的过程将如何做到这一点。

嗨,其实我有 2 个过程。一个是 perl 进程,它是一个较慢的进程,它会在一项任务完成时不断更新文件,以将该任务的状态更新为成功或失败。其他是 Java 进程,它不断地从这个文件中读取任务状态是成功还是失败。因此,由于 java 进程是快速进程(因为它不需要等待任何任务完成),所以现在将是什么场景。当文件被 perl 进程锁定以进行写入时,此 java 线程将进入等待状态还是终止状态。操作系统是linux。

4

1 回答 1

0

如果您想在读取文件的同时更新文件,最好以原子方式进行(以不同的名称编写新版本,然后合并其内容或稍后重命名)。

但是,您需要确保只有一个进程在任何给定时间点(在本例中为 perl 脚本)更新它,否则可能存在竞争条件

您可能还想阅读一般的unix 文件锁定

于 2013-08-13T12:58:59.740 回答