0

我正在开发一个将驻留在多台机器上的软件。数据库是共享的。我需要每台机器从数据库中获取唯一资源(行)并将其锁定。

我的问题是我该如何处理?因为每台机器读取相同的行,并且可能发生竞争。

基本上我认为它与线程相同,但不同之处在于我不能在它们之间共享共享资源......

这是如何解决的?

谢谢!

4

3 回答 3

0

向该表添加一个附加列,该列可以存储特定于机器的唯一值,例如机器名称Environment.MachineName。每台机器在第一次读取表时都会用自己的机器名称更新特定的行。通过这样做,您可以确保每一行只能由特定机器更改。

  • 当机器第一次读取资源表时,它将获得第一条没有机器名称的记录。(防止覆盖其他机器已锁定的行)。

  • 并且它将使用其机器名称更新该行的唯一列。

  • 每当机器想要更新一行时,检查该行的机器名称和请求的机器是否相同。

  • 完成所有操作后,从特定行清除机器名称(释放资源)。

于 2013-08-31T07:20:02.353 回答
0

所有严肃的数据库系统都有锁定行和/或表的机制。在您自己实施一些自制锁定之前,请检查您的 DBMS 已经带来了什么。

您没有提及您使用的 DBMS,因此您必须自己进行谷歌搜索。从“数据库锁”开始,看看它会把你带到哪里。

于 2013-08-31T07:31:40.933 回答
0

我有一个类似的问题,我通过在数据库级别编写自己的锁定过程来解决。

基本上,我添加了一个名为“SessionLock”的列,它是一个 GUID。

每当我进行需要锁定的数据库调用时,我都会使用存储过程来模拟测试和设置(如果 SessionLock 不为​​空,我使用更新并检查返回的行是否等于我请求的行数锁定)。然后我在行上执行一些工作并在完成后解锁它们。

现在数据库本身有自己的锁定,所以你可能不需要这么复杂。但是这样你就可以完全控制行。

于 2013-08-31T07:00:24.057 回答