Quiero ejecutar varios scripts de shell Bash en paralelo. Sin embargo, quiero evitar las condiciones de carrera. Qué comandos de Unix son verdaderamente atómicos que podría usar para este propósito y cómo puedo usarlos?
Respuesta aceptada:
Si lockfile
no está instalado en su sistema, entonces mkdir
hará
el trabajo:es una operación atómica, y falla si el directorio
ya existe (siempre y cuando no agregue el -p
interruptor de línea de comando
).
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"
}