簡體   English   中英

有沒有辦法在不同進程(而不是線程)之間同步寫入文件

[英]is there a way to synchronize write to a file among different processes (not threads)

我的項目需要在幾個不同的物理機器上運行,這些物理機器之間有共享文件系統。 由此產生的一個問題是如何將寫入同步到公共單個文件。 使用線程,可以通過鎖輕松實現,但是我的程序由分布在不同機器上的進程組成,我不知道如何進行同步。 從理論上講,任何檢查文件是否正在打開的方法或任何類似鎖定的解決方案都可以,但我不能自己解決這個問題。 蟒蛇的方式將特別受到贊賞。

有多個進程的文件鎖定機制,甚至可以用多種語言編寫。 為此使用操作系統特定的鎖定機制。 Java JNI,C ++等語言實現了這些鎖定機制,以在多個OS進程中[在LTs-Lightweight Threads中]同步文件訪問。

查看您的語言特定的Native文件同步機制。

以下是基於Java的示例:

FileInputStream in = new FileInputStream(file);
try {
    java.nio.channels.FileLock lock = in.getChannel().lock();
    try {
        Reader reader = new InputStreamReader(in, charset);
        ...
    } finally {
        lock.release();
    }
} finally {
    in.close();
}

這種鎖定應該是OS獨立的[在Unix系統,Windows等工作]。

對於這種場景,我建議使用Double Locking來更好地控制訪問。

只是一個想法...

難道你不能把'lock'文件放在與你試寫的文件相同的目錄中嗎? 在分布式進程中,檢查此鎖定文件。 如果它存在睡眠x量,然后再試一次。 同樣,當當前打開文件的進程完成時,進程會刪除鎖定文件嗎?

因此,如果您在簡單的情況下有2個名為A和B的進程:

進程A檢查鎖定文件,如果它不存在,它將創建鎖定文件並執行文件所需的操作。 完成后刪除此鎖定文件。

如果進程A檢測到鎖定文件,那么這意味着進程B具有該文件,因此請稍后再次嘗試....重復沖洗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM