相互排斥而不涉及两个过程

时间:2010-07-30 17:15:32

标签: locking semaphore race-condition mutual-exclusion

我有一个独特的问题。尝试访问一个文件有两个进程(P0和P1)。 P0正在向文件写入信息,P1正在读取信息。在P0完成写入之前P1正在读取的两者之间存在竞争条件。我考虑过使用Locks,Semaphores等。但是,P1存在于一组代码中,我不允许以任何方式改变它,并且它目前没有实现来支持上面提出的修复。

有没有办法在不触及这两组代码的情况下删除这种竞争条件?

2 个答案:

答案 0 :(得分:0)

你可以让P0写入文件A并让P1从文件B中读取。当P0完成文件写入时,将文件A重命名为文件B.你必须确保重命名操作是原子的。

答案 1 :(得分:0)

Niels的解决方案非常棒,但如果它是一个包含小增量的大文件,则可能不适用。 我建议您的解决方案取决于:
a)P1是否锁定文件而你只是想摆脱冲突,
b)是否需要确保P1读取的内容始终是P0更改的更新副本,以及
c)P1是否尊重有关文件的读锁定。

此外,查找基础O / S系统调用,以查看是否可以在P0内跟踪P1的行为以协调进程。例如,对于Windows,.NET System.Diagnostics.Process类可能会提供一些有用的方法。

相关问题