2014-07-02 111 views
0

我有两个Win32程序:“计划A”,一个网络接口,以及“计划B”,一名工人计划,上文件的集合操作。 “程序A”告诉“程序B”对一组文件执行操作,“程序B”执行该操作,并向“程序A”发出信号表明它已完成。锁定多个程序文件访问

现在,情况如下:在不同的计算机上可能存在多个“程序A”和“程序B”,访问存储在网络共享中的文件。我需要确保一次只有一个“程序B”正在访问一组文件。

我可以使用锁定文件来做到这一点,但这些问题有我需要处理的问题(比如不会离开,如果拥有的进程崩溃)。我不认为我可以使用传统的文件锁定,因为我的架构需要“程序A”来控制锁定,而“程序B”访问这些文件。有没有我没有看到的解决方案,比如“全网互斥”?

+0

为什么不与主机上运行的文件进行交互,一个“B计划”?所有其他“程序A”通过网络套接字连接到它并告诉它开始工作。 – psyklopz

+0

@psyklopz,“程序B”是一个现有的程序,嵌入了约20年的僵化设计决策(其中包括非常强大的单线程)。它执行的操作也是CPU密集型的,所以我可能需要在多台服务器上运行副本来管理负载。 – Mark

+0

听起来像你需要一个数据库。看起来你试图自己实现一个,并且听起来很脆弱。你真的不应该试图重塑这个特殊的车轮。 –

回答

1

锁定的文件应该是你所需要的。如果存在关联的锁定文件,则只需选择“如果我无法打开相关联的锁定文件进行独占访问”而不是“此文件被其他人锁定”的语义”。

如果其中一个工作服务器崩溃(整个服务器,而不是您的程序),但仍然可能会遇到这种情况,您仍然可能遇到需要管理员干预的问题;只要确保你的逻辑提出了某种警报,如果任何特定的文件被锁定了很长时间。

1

如果使用FILE_FLAG_DELETE_ON_CLOSE创建“锁定文件”,即使进程崩溃,实际上也应删除该文件。 (但我不完全确定这也发生在网络驱动器上)。