Je souhaite exécuter plusieurs scripts shell Bash en parallèle. Cependant, je veux éviter les conditions de course. Quelles sont vraiment les commandes Unix atomiques que je pourrais utiliser à cette fin, et comment puis-je les utiliser ?
Réponse acceptée :
Si lockfile
n'est pas installé sur votre système, alors mkdir
fera
le travail :c'est une opération atomique, et elle échoue si le répertoire
existe déjà (tant que vous n'ajoutez pas le -p
commutateur de ligne de commande
).
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"
}