2012-12-10 83 views
0

我想使用mysql行級別鎖定。我無法鎖定完整的表格。我想避免兩個進程同時處理兩個不同的服務器消息。 我以爲我可以有一些表叫做: server_lock如果一個進程開始在服務器上工作,它會在表中插入一行。執行鎖定mysql

這種方法的問題是,如果應用程序崩潰。我們需要手動移除鎖。 有沒有一種方法可以排列級別鎖定,如果應用程序崩潰,鎖定會被釋放?

編輯 我使用C++作爲語言。 我的應用程序類似於消息隊列。但不同之處在於,每個隊列有一個進程填充了兩個隊列。如果動作屬於同一個對象,並且兩者正在處理相同的對象,則可能會導致錯誤的數據。所以我希望在這兩個隊列中有一個鎖定機制,這樣兩個處理器不會同時修改同一個對象。

+0

你有一個應用程序有兩個隊列或兩個應用程序與一個queu爲每個? –

+0

兩個應用程序每個都有一個隊列。 –

回答

0

我能想到的方法有兩種:

  • 實現你的程序的一些錯誤處理程序在卸下鎖。如果不瞭解你的程序,很難說如何做到這一點,但大多數語言在崩潰退出之前有一些方法來做一些工作。這是很危險的,因爲當某些事情不正確時會發生崩潰。如果你繼續做任何工作,可能會破壞數據庫或類似的東西。
  • 定期更新鎖定。在您的程序中添加一個線程,以定期重新獲取鎖,或者在您正在執行的某個循環中重新獲取鎖。然後,當一段時間沒有更新鎖時,您知道它屬於崩潰的程序。
+0

我更新了更多細節的問題。這些信息有用嗎? –