Действительно ли опасно иметь несколько параллельных заданий, создают тот же каталог одновременно?

Менее простой, но другая любезность опции ТАК.

5
задан 19 June 2010 в 22:40
4 ответа

Простой mkdir является атомарным (при использовании NTFS существуют возможности, это не является атомарным, нуждайтесь в некоторой проверке).

Вычетом mkdir-p folder1/folder2/запускается путем создания folder1, который является атомарным. Я f одновременно другой процесс пытается создать folder1 также, он будет видеть, что folder1 создается так, он попытается создать folder2, который или перестанет работать (если первый процесс уже создал folder2), или успешно выполнитесь, и первый процесс перестанет работать.

Это не должно быть проблемой, если это правильно обрабатывается (т.е. хорошая обработка ошибок).

7
ответ дан 3 December 2019 в 01:08

Локальная фс должна быть posix, и все операции (включая создание каталогов) должны быть атомарными.

Я предполагаю, что это сводится к тому, что делает mkdir-p, когда это начинает создавать путь и затем внезапно встречается с (дальнейшим) элементом того пути, это уже создается. Если это будет нормально, то это продолжится независимый от того, что это сделало прежде и Ваши операции должно быть безопасным. Для получения дополнительной информации Вашего конкретного mkdir инструмента необходимо видеть исходный код.

В сетевых / кластерных файловых системах это может зависеть от сетевой задержки, загрузки сервера или смонтировать опции.

Кроме того, не было бы трудно записать сценарий, который пробует его много времен с высоким параллелизмом, отказы должно быть легко обнаружить.

2
ответ дан 3 December 2019 в 01:08

Нет, это не опасно.

Одно задание преуспеет в том, чтобы создать каталог, и другие перестанут работать.

1
ответ дан 3 December 2019 в 01:08

Не должно быть никакой опасности ни для какого POSIX совместимая файловая система от нескольких параллельных (гонки) mkdir -p команды. Я, на самом деле, протестировал свой собственный сценарий оболочки, блокирующий функцию (перенесенный mkdir ... || ... (но НЕ с -p) при помощи сотен мчащегося процесса в моих усилиях обнаружить любые отказы от гонки на Linux и Солярисе с несколькими различными локальными операционными системами. Я никогда не видел отказов и моего поиска, и чтение предложило, чтобы это было безопасно.

(Придеритесь к мелочам: в Вашем случае это кажется, что атомарность не требуется. Атомарность очень важна для взаимного исключения/блокировки, но не необходима для простой безопасности--- mkdir() может перестать работать безопасно, когда каталог уже там. Несколько гонки mkdir команды оболочки должны каждый иметь некоторый свой сбой вызовов безопасно, поскольку они пересекают компоненты пути назначения, пытающегося создать каждого. Атомарность не важна этому).

1
ответ дан 3 December 2019 в 01:08

Теги

Похожие вопросы