C# 多台机器上进程之间的锁定机制

C# 多台机器上进程之间的锁定机制,c#,nhibernate,locking,C#,Nhibernate,Locking,我有一个带有NHibernate的C#应用程序,它必须在SQL Server数据库上执行一些操作 我们的目标是在同一台机器和其他机器上多次运行此应用程序 实际上,应用程序在SQL表中插入一行,并检查具有最小日期的第一行是否是具有正确PID和机器名称的行,以便应用程序设置锁并执行工作 我们对此逻辑有问题,因为如果保留锁的应用程序崩溃,应用程序还必须删除其他应用程序的锁 有关于更改锁结构的提示吗 问题是应用程序可以在多台机器上运行。如何管理数据库中的锁?您可以有一个表/存储过程,其中每个正在运行的实

我有一个带有NHibernate的C#应用程序,它必须在SQL Server数据库上执行一些操作

我们的目标是在同一台机器和其他机器上多次运行此应用程序

实际上,应用程序在SQL表中插入一行,并检查具有最小日期的第一行是否是具有正确PID和机器名称的行,以便应用程序设置锁并执行工作

我们对此逻辑有问题,因为如果保留锁的应用程序崩溃,应用程序还必须删除其他应用程序的锁

有关于更改锁结构的提示吗


问题是应用程序可以在多台机器上运行。

如何管理数据库中的锁?您可以有一个表/存储过程,其中每个正在运行的实例都注册到该表/存储过程,获取唯一的id,并使用该存储过程执行锁定和释放操作。(与防止单个用户从多台机器多次登录相同的技术)。

  • 有一个(服务器)进程来管理锁-所有客户端都已注册并从此服务器请求锁
我已经用两种方式实现了它


脱机锁可以用于数据库,但如果有太多进程一直在等待锁,则可能会引入抖动(尽管一个像样的db服务器应该缓存信息)。另外,在处理该表时,请确保使用ReadCommitted事务隔离级别,并做好死锁准备

我不喜欢使用StoredProcedures,因为在我的Nhibernate配置中,我没有任何存储过程。我的意思是在标准数据范围之外将其作为单独的模块一起实现。