如何跨网络互斥?

Dan*_*ira 8 language-agnostic networking synchronization mutex

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

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

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


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

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

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

Mat*_*ell 2

我认为您正在寻找数据库事务。事务会将您的更改与所有其他客户端隔离。

更新:您提到该函数当前不写入数据库。如果你想互斥这个函数,就必须有一些中心位置来存储当前的互斥持有者。数据库可以解决这个问题——只需添加一个包含当前持有者计算机名的新表即可。在开始您的功能之前检查该表。

我认为你的问题可能很混乱。互斥锁应该是为了保护资源。如果您的函数不访问数据库,那么您要保护什么共享资源?

  • 要进行互斥,您需要在客户端和中心点之间进行“某种”形式的通信。如果您已经有一个数据库连接,其中包括一个**非常**良好的互斥实现(数据库就是用于这个东西的),为什么不使用它呢? (4认同)