语言无关 – 如何跨网络互斥?

我有一个在网络上运行的桌面应用程序,每个实例都连接到同一个数据库.

那么,在这种情况下,如何实现一个互斥体,该互斥体适用于连接到同一数据库的所有正在运行的实例?

换句话说,我不希望这两个实例同时运行相同的功能.如果一个人已经在运行该功能,则其他实例不应该有权访问它.

PS:数据库事务不会解决,因为我不想使用mutex的功能不使用数据库.我之前提到过数据库只是因为它可以用来在运行的实例之间交换信息.

PS2:该函数大约需要30分钟才能完成,所以如果第二个实例尝试运行相同的函数,我想显示一个很好的消息,它现在无法执行,因为计算机’X’已经在运行该函数.

PS3:该功能必须在客户端机器上处理,所以我不能使用存储过程.

最佳答案
我想你正在寻找数据库交易.事务将使您的更改与所有其他客户端隔离.

更新:
您提到该函数当前未写入数据库.如果要对此函数进行互斥,则必须有一些中心位置来存储当前的互斥锁.数据库可以为此工作 – 只需添加一个包含当前持有者的计算机名称的新表.在开始功能之前检查该表.

我认为你的问题可能会引起混乱.互斥体应该是关于保护资源.如果您的功能没有访问数据库,那么您要保护哪些共享资源?

转载注明原文:语言无关 – 如何跨网络互斥? - 代码日志