2011-09-12 18 views
0

從TCL鎖定Metakit數據庫的首選方式是什麼?鎖定TCL中的Metakit數據庫

基本上我有一個應用程序從Metakit數據庫文件讀取/寫入,我擔心如果用戶有兩個我的應用程序運行實例,他們可能會損壞數據庫(通過同時進行兩次寫入)。

我知道我可以使用套接字在實例之間進行通信,但我寧願不會與PC上現有的軟件衝突。我也考慮過使用鎖定文件,但如果進程崩潰,數據庫將被永久鎖定。我知道在UNIX上通常會將PID寫入鎖文件,但我不知道如何判斷一個進程是否仍以跨平臺方式運行。我的主要目標是Windows。

我並不完全反對添加一些本機代碼(編譯的C二進制),但認爲可能會有更好的純TCL方式。

謝謝!

回答

0

使用鎖定文件並不常見;即使數據庫崩潰可能會使數據庫很難解鎖。這個問題有一些簡單的解決方法。

  • 將鎖放置在重新啓動後清理的位置; /tmp for unix
  • 如果應用程序打開並發現鎖仍處於打開狀態;告訴用戶發生了什麼,並提出如何解決問題;提供刪除鎖定文件(發出足夠的警告之後)或告訴用戶它們在哪裏,以便他們可以冒自己刪除它的風險。
0

Metakit page on commits的說明表明,有多種訪問模式可用於允許多個閱讀器與單個寫入器併發(可能使用鎖定引擎蓋)。標準的metakit非常小心,不要將其文件置於不一致的狀態,所以我期望它能夠很好地處理所有這些事情。我不知道的是該頁面上討論的功能如何暴露給Tcl腳本。