我有一个由多台 Windows 计算机共享的网络驱动器 (Z:\)。是否可以通过简单地在此网络驱动器上创建/删除文件来实现跨机锁定?
例如,两台计算机 A 和 B 要同时写入 ID 为 123 的共享资源。
其中一台计算机,比如 A,首先通过创建一个空文件 Z:\locks\123 来锁定资源。当 B 看到有名为“123”的锁文件时,B 知道资源 123 正在被其他人使用,所以它必须等待 Z:\locks\123 被 A 删除才能访问资源。
这就像多线程中的关键部分,但我想在多台机器上进行。
我正在尝试在 Python 中实现。这是我想出的:
import os
import time
def lock_it(lock_id):
lock_path = "Z:\\locks\\" + lock_id
while os.path.exists(lock_path):
time.sleep(5) # wait for 5 seconds
# create the lock file
lock_file = open(lock_path, "w")
lock_file.close()
def unlock_it(lock_id):
# delete the lock file
lock_path = "Z:\\locks\\" + lock_id
if os.path.exists(lock_path):
os.remove(lock_path)
这将不起作用,因为可能有多个进程退出等待状态并同时创建锁定文件。
再次,问题是:是否可以在共享存储上实现跨机器锁定机制?