我正在开发一种将驻留在多台机器上的软件。数据库是共享的。 我需要每台机器从数据库中获取一个唯一的资源(行)并将其锁定。
我的问题是我该如何处理?因为每台机器都读取相同的行,并且可以进行比赛。
基本上我认为它与线程相同但不同之处在于我无法在它们之间共享共享资源......
这是如何解决的?
谢谢!
答案 0 :(得分:0)
我有一个类似的问题,我通过在数据库级别编写自己的锁定过程来解决这个问题。
基本上我添加了一个名为“SessionLock”的列,它是一个GUID。
每当我进行需要锁定的数据库调用时,我使用存储过程来模拟测试和设置(如果SessionLock不为null,我使用Update,并检查返回的行是否等于我的行数要求被锁定)。然后,我在行上执行一些工作,并在完成后解锁它们。
现在数据库本身有自己的锁定,因此您可能不需要这么多的复杂功能。但是这样你就可以完全控制行了。
答案 1 :(得分:0)
向该表添加一个附加列,该列可以存储特定于计算机的唯一值,例如计算机名称Environment.MachineName
。当第一次读取表时,每台机器将使用自己的机器名更新特定行。通过这样做,您可以确保每行只能由特定的机器更改。
当机器第一次读取资源表时,它会得到 第一个没有机器名的记录。 (防止 重写行其他机器已锁定)。
它将使用其机器名更新该行的唯一列。
每当机器想要更新行时,检查机器名称是否为 该行和请求的机器相同。
完成所有操作后,清除机器名称 特定行(释放资源)。
答案 2 :(得分:0)
所有严肃的数据库系统都有一种锁定行和/或表的机制。在自己实现一些homebrewn锁定之前,请查看您的DBMS已经为表格带来了什么。
你没有提到你使用的DBMS,所以你必须自己进行谷歌搜索。 从“数据库锁定”开始,看看它引导您的位置。