独占\对文件的同步访问(排队)

时间:2014-04-07 12:26:10

标签: file unix concurrency queue aix

我们有一个共享文件夹,其中包含一些需要处理的文件。 我们还有3台运行shell脚本的UNIX服务器,每次都会接收并处理一个文件。在脚本的末尾,文件被移走了。 3 UNIX服务器不会相互通信,并且彼此不了解。

在您看来,保证每个文件一次处理的最佳方法是什么,而不会引起并发访问问题\错误?

1 个答案:

答案 0 :(得分:2)

你需要某种类型的文件锁定机制。一些可能性:

  • 您可以为工作中的每个文件创建临时锁定文件。例如,对于文件name.ext,您需要在开始处理之前创建name.ext.lock。如果这个文件已经存在 - 同样,创建失败并且#34;文件存在",这意味着有人已经在处理它,因此你不应该对它做任何事情。
  • 其次,您可以使用咨询锁。建议锁定并不适用于每种类型的文件共享,并且它们只有libc级别的接口,因此您无法从shell脚本中使用它们。我建议深入研究flock libc api call的手册。
  • 第三,它是最难的,它是特定于unix的。这是强制性的锁定。强制锁定意味着锁定甚至对过程都是有效的,这些过程对它们一无所知。您可以在此处详细了解它们:Mandatory file lock on linux

在我的位置我做了第一个,如果我可以修改处理的工作(例如,如果我可以用脚本挂钩它们甚至我正在开发处理脚本)。如果没有,你可能需要第三个,虽然它并不总是有效。