0

1 つの perl プロセスが 1 つのファイルに書き込み、同じファイルが Java スレッドによって読み取られていることに 1 つの疑問があります。perlプロセスがファイルに書き込んでいるときに、そのスレッドがそのファイルにアクセスして読み取ると、スレッドは待機状態になるか、読み取れるようになります。その後、待機状態になると、実行状態に戻るか、永久に待機状態になります。実際に2つの異なるプロセスがそれを行う方法。

こんにちは、実際には2つのプロセスがあります。1 つは perl process で、これは遅いもので、1 つのタスクが完了するたびにファイルを継続的に更新して、そのタスクのステータスを成功または失敗として更新します。もう 1 つは、タスクのステータスが成功か失敗かにかかわらず、このファイルから継続的に読み取る Java プロセスです。したがって、Javaプロセスは高速なプロセスであるため(タスクが完了するのを待つ必要がないため)、シナリオはどうなりますか。ファイルが書き込みのために perl プロセスによってロックされている場合、この Java スレッドは待機状態または終了状態になります。OSはリナックス。

4

1 に答える 1

0

読み取りと同時にファイルを更新する場合は、アトミックに実行することをお勧めします (新しいバージョンを別の名前で書き込み、その内容をマージするか、後で名前を変更します)。

ただし、特定の時点で更新しているプロセスが 1 つだけであることを確認する必要があります (この場合は perl スクリプト)。そうしないと、競合状態が発生する可能性があります。

UNIX のファイルロック全般についても読みたいと思うかもしれません。

于 2013-08-13T12:58:59.740 に答える