有几个并行作业同时创build相同的目录是危险的吗?

有几个并行作业使用mkdir -p创build相同的目录是危险的吗? (这是在Linux下)

在我的情况下,我发送了许多作业到一个SUN网格并行处理它们,其中一些作业从创build一个特定的目录foo 。 所以,执行不同的mkdir命令可能恰好在同一时间发生。

一个简单的mkdir是primefaces的(如果你正在使用NTFS,有可能它不是primefaces的,需要一些检查)。

通过扣除,mkdir -p folder1 / folder2 /通过创buildprimefaces的folder1来启动。 同时,另一个进程也尝试创buildfolder1,它将会看到folder1被创build,所以它将尝试创buildfolder2,这将会失败(如果第一个进程已经创build了folder2)或者成功,第一个进程将失败。

这应该不是一个问题,如果这是正确的处理(即良好的error handling)。

本地fs应该是posix,所有的操作(包括创build目录)应该是primefaces的。

我想这归结于mkdir -p在开始创buildpath时所做的事情,然后突然遇到已经创build的path的(进一步)元素。 如果它是理智的,它将继续独立于之前的操作,并且操作应该是安全的。 有关您的特定mkdir工具的详细信息,您应该看到源代码。

在联网/集群文件系统上,它很可能取决于networking延迟,服务器负载或安装选项。

另外,编写一个脚本可以很多次地尝试高并发性,故障应该很容易检测。

不,这不危险。

一份工作将成功创build目录,其他工作将失败。

对于来自多个并发(赛车) mkdir -p命令的POSIX兼容文件系统,不应该有任何危险。 事实上,我已经testing了我自己的shell脚本lockingfunction(用mkdir ... || ... (但不包括-p ),通过使用数百个赛车过程来检测Linux上的任何故障和Solaris的几个不同的本地操作系统,我从来没有看到任何失败,我的search和阅读build议它应该是安全的。

(Nitpick:在你的情况下,这听起来像primefaces性是不需要的。primefaces性是互斥/locking的关键,但对于纯粹的安全性来说不是必须的—当目录已经存在时, mkdir()可以安全地失败。当他们遍历目标path的组件尝试创build每个组件时,它们的一些调用会无害地失败,primefaces性与此无关)。