mkdir -p를 병렬화해도 안전합니까?

mkdir -p를 병렬화해도 안전합니까?

나는 다음과 같이 Makefile 규칙을 작성하고 있습니다.

out/%.x: ...
    mkdir -p $(@D)/
    ...

-j나는 이 Makefile( )을 병렬화하여 많은 mkdir -p을 동시에 트리거할 계획 입니다.

이거 안전한가요? 아니면 mkdir -p한 번만 발생하도록 하여 문제를 방지해야 합니까 ?

(메모mkdir -p와 달리 파일 시스템 수준에서 반드시 단일 작업은 아닙니다 . mkdir)

답변1

에 대한 이론적 근거POSIXmkdir라고

경로 구성 요소가 이미 존재하는 경우 오류가 발생하지 않으므로-피옵션은 특정 디렉터리가 존재하는지 확인하는 데에도 유용합니다.

이는 병렬 사용이 안전해야 함을 의미합니다. 경주의 가능성을 고려할 때 귀하의 의심을 이해할 수 있으므로 구현을 살펴보겠습니다.

GNU에서 coreutils옵션은 -p결국 다음에 의해 처리됩니다.mkancesdirs, 귀하의 두려움을 완화시키는 유용한 설명이 있습니다.

두 프로세스가 이 기능을 병렬로 실행하는 경우에도 작동해야 하는 알고리즘을 사용하여 FILE의 상위 디렉터리가 존재하는지 확인합니다.

( 의 오류에 즉시 조치를 취하는 대신 각 구성 요소 디렉터리에 mkdir시도하고 chdir실패할 경우에만 실패합니다.)

GNU Make를 사용한다면,2차 확장다른 전제조건과 동일한 방식으로 디렉토리를 처리하려면 다음을 수행하십시오.

.SECONDEXPANSION:

%/:
        mkdir -p $@

out/%.x: $$(@D)/ ...
        ...

관련 정보