Voglio eseguire più script di shell Bash in parallelo. Tuttavia, voglio evitare le condizioni di gara. Quali sono i comandi Unix veramente atomici che potrei usare per questo scopo, e come posso usarli?
Risposta accettata:
Se lockfile
non è installato sul tuo sistema, quindi mkdir
farà
il lavoro:è un'operazione atomica e fallisce se la directory
esiste già (a patto che non si aggiunga il -p
riga di comando
interruttore).
create_lock_or_wait () {
path="$1"
wait_time="${2:-10}"
while true; do
if mkdir "${path}.lock.d"; then
break;
fi
sleep $wait_time
done
}
remove_lock () {
path="$1"
rmdir "${path}.lock.d"
}