我有一个在网络上运行的桌面应用程序,每个实例都连接到同一个数据库。
那么,在这种情况下,如何实现在连接到同一数据库的所有正在运行的实例上工作的互斥体?
换句话说,我不希望两个以上实例同时运行相同的函数。如果一个实例已经在运行该函数,则其他实例不应访问它。
PS:数据库事务无法解决,因为我不想互斥的函数不使用数据库。我提到数据库只是因为它可用于在运行的实例之间交换信息。
PS2:该功能大约需要 30 分钟才能完成,因此如果第二个实例尝试运行相同的功能,我想显示一条很好的消息,表明它现在无法执行,因为计算机“X”已经在运行该功能。
PS3:该函数必须在客户端计算机上处理,所以我不能使用存储过程。
我认为您正在寻找数据库事务。事务会将您的更改与所有其他客户端隔离。
更新:
您提到该函数当前不写入数据库。如果你想互斥这个函数,就必须有一些中心位置来存储当前的互斥持有者。数据库可以解决这个问题——只需添加一个包含当前持有者计算机名的新表即可。在开始您的功能之前检查该表。
我认为你的问题可能很混乱。互斥锁应该是为了保护资源。如果您的函数不访问数据库,那么您要保护什么共享资源?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)