
내 Bash 스크립트에서는 정수( )를 인수로 사용하는 두 가지 다른 함수 taskA
및 를 실행해야 합니다 . 의 완성 여부에 따라 달라 지므로 다음과 같은 축약된 코드가 작업을 수행합니다.taskB
$i
taskB $i
taskA $i
#!/bin/bash
taskA(){
...
}
taskB(){
...
}
for i in {1..100};
do
taskA $i
taskB $i
done
taskA
서로 다른 위치에서 독립적으로 실행될 수 있으므로 세마포어 $i
를 만들 수 있습니다(여기에서 가져옴).Bash FOR 루프 병렬화) 병렬로 실행합니다. 그러나 이전 taskB $i
의 완료가 필요합니다 . 따라서 나중에 순차적으로 실행합니다.taskA $i
taskB $(i-1)
#!/bin/bash
open_sem(){
mkfifo pipe-$$
exec 3<>pipe-$$
rm pipe-$$
local i=$1
for((;i>0;i--)); do
printf %s 000 >&3
done
}
run_with_lock(){
local x
read -u 3 -n 3 x && ((0==x)) || exit $x
(
( "$@"; )
printf '%.3d' $? >&3
)&
}
taskA(){
...
}
taskB(){
...
}
N=36
open_sem $N
for i in {1..100};
do
run_with_lock taskA $i
done
wait
for i in {1..100};
do
taskB $i
done
프로시저를 더욱 최적화하기 위해 병렬 실행을 위한 세마포어를 유지 taskA
하고 동시에 실행하여 taskB
"추월"하지 않고 taskA
의존하는 작업이 완료될 때까지 기다리는 것이 가능합니까?