É perigoso ter várias tarefas paralelas criando o mesmo diretório ao mesmo tempo?

5

É perigoso ter várias tarefas paralelas criando o mesmo diretório usando mkdir -p ? (Isso está no Linux.)

No meu caso, envio muitas tarefas para uma grade SUN para processá-las em paralelo, e algumas dessas tarefas começam criando um determinado diretório foo . Então, a execução dos diferentes comandos mkdir pode acontecer exatamente ao mesmo tempo ...

    
por user9474 19.06.2010 / 21:40

4 respostas

7

Um mkdir simples é atômico (se você estiver usando NTFS, há chances de que ele não seja atômico, precise de alguma verificação).

Por dedução, o mkdir -p folder1 / folder2 / começa criando a pasta1 que é atômica. Se ao mesmo tempo outro processo tentar criar folder1 também, ele verá que folder1 é criado, então ele tentará criar folder2 que falhará (se o primeiro processo já criou folder2) ou será bem-sucedido e o primeiro processo falhará.

Isso não deve ser um problema se isso for tratado adequadamente (ou seja, bom tratamento de erros).

    
por 19.06.2010 / 21:55
2

O fs local deve ser posix e todas as operações (incluindo a criação de diretórios) devem ser atômicas.

Eu acho que tudo se resume ao que o mkdir -p faz quando começa a criar um caminho e, de repente, encontra um elemento (adicional) daquele caminho que já foi criado. Se for são, ele continuará independente do que fez antes e suas operações devem ser seguras. Para os detalhes da sua ferramenta mkdir em particular, você deve ver o código fonte.

Em sistemas de arquivos em rede / em cluster, pode muito bem depender da latência da rede, da carga do servidor ou das opções de montagem.

Além disso, não seria difícil escrever um script que tente muitas vezes com uma alta simultaneidade, as falhas devem ser fáceis de detectar.

    
por 19.06.2010 / 22:11
1

Não, isso não é perigoso.

Um trabalho será bem-sucedido ao criar o diretório e os outros falharão.

    
por 19.06.2010 / 21:54
1

Não deve haver perigo para nenhum sistema de arquivos compatível com POSIX de múltiplos comandos mkdir -p simultâneos (de competição). Na verdade, eu testei minha própria função de bloqueio de script de shell (envolvida em mkdir ... || ... (mas NÃO com -p ) usando centenas de processos de corrida em meus esforços para detectar quaisquer falhas da corrida no Linux e Solaris com alguns sistemas operacionais locais diferentes, nunca vi falhas e minha pesquisa e leitura sugeriram que deveria ser seguro.

(Nitpick: no seu caso, soa como atomicidade não é necessária. Atomicidade é crítica para mutex / bloqueio, mas não necessária para a mera segurança --- mkdir() pode falhar com segurança quando o diretório já está lá. Várias corridas% co_de Os comandos% shell devem ter suas chamadas reprovadas sem causar danos enquanto percorrem os componentes do caminho de destino que tentam criar cada um deles. A atomicidade é irrelevante para isso.

    
por 20.06.2010 / 00:11