2014-07-02 60 views
0

我有兩個Win32程序:「計劃A」,一個網絡接口,以及「計劃B」,一名工人計劃,上文件的集合操作。 「程序A」告訴「程序B」對一組文件執行操作,「程序B」執行該操作,並向「程序A」發出信號表明它已完成。鎖定多個程序文件訪問

現在,情況如下:在不同的計算機上可能存在多個「程序A」和「程序B」,訪問存儲在網絡共享中的文件。我需要確保一次只有一個「程序B」正在訪問一組文件。

我可以使用鎖定文件來做到這一點,但這些問題有我需要處理的問題(比如不會離開,如果擁有的進程崩潰)。我不認爲我可以使用傳統的文件鎖定,因爲我的架構需要「程序A」來控制鎖定,而「程序B」訪問這些文件。有沒有我沒有看到的解決方案,比如「全網互斥」?

+0

爲什麼不與主機上運行的文件進行交互,一個「B計劃」?所有其他「程序A」通過網絡套接字連接到它並告訴它開始工作。 – psyklopz

+0

@psyklopz,「程序B」是一個現有的程序,嵌入了約20年的僵化設計決策(其中包括非常強大的單線程)。它執行的操作也是CPU密集型的,所以我可能需要在多臺服務器上運行副本來管理負載。 – Mark

+0

聽起來像你需要一個數據庫。看起來你試圖自己實現一個,並且聽起來很脆弱。你真的不應該試圖重塑這個特殊的車輪。 –

回答

1

鎖定的文件應該是你所需要的。如果存在關聯的鎖定文件,則只需選擇「如果我無法打開相關聯的鎖定文件進行獨佔訪問」而不是「此文件被其他人鎖定」的語義」。

如果其中一個工作服務器崩潰(整個服務器,而不是您的程序),但仍然可能會遇到這種情況,您仍然可能遇到需要管理員干預的問題;只要確保你的邏輯提出了某種警報,如果任何特定的文件被鎖定了很長時間。

1

如果使用FILE_FLAG_DELETE_ON_CLOSE創建「鎖定文件」,即使進程崩潰,實際上也應刪除該文件。 (但我不完全確定這也發生在網絡驅動器上)。