2012-12-10 44 views
0

我想使用mysql行级别锁定。我无法锁定完整的表格。我想避免两个进程同时处理两个不同的服务器消息。 我以为我可以有一些表叫做: server_lock如果一个进程开始在服务器上工作,它会在表中插入一行。执行锁定mysql

这种方法的问题是,如果应用程序崩溃。我们需要手动移除锁。 有没有一种方法可以排列级别锁定,如果应用程序崩溃,锁定会被释放?

编辑 我使用C++作为语言。 我的应用程序类似于消息队列。但不同之处在于,每个队列有一个进程填充了两个队列。如果动作属于同一个对象,并且两者正在处理相同的对象,则可能会导致错误的数据。所以我希望在这两个队列中有一个锁定机制,这样两个处理器不会同时修改同一个对象。

+0

你有一个应用程序有两个队列或两个应用程序与一个queu为每个? –

+0

两个应用程序每个都有一个队列。 –

回答

0

我能想到的方法有两种:

  • 实现你的程序的一些错误处理程序在卸下锁。如果不了解你的程序,很难说如何做到这一点,但大多数语言在崩溃退出之前有一些方法来做一些工作。这是很危险的,因为当某些事情不正确时会发生崩溃。如果你继续做任何工作,可能会破坏数据库或类似的东西。
  • 定期更新锁定。在您的程序中添加一个线程,以定期重新获取锁,或者在您正在执行的某个循环中重新获取锁。然后,当一段时间没有更新锁时,您知道它属于崩溃的程序。
+0

我更新了更多细节的问题。这些信息有用吗? –