【发布时间】:2022-01-14 17:03:48
【问题描述】:
#!/bin/bash
if [ ! -f numbers ]; then echo 0 > numbers; fi
count=0
touch numbers
echo $count > numbers
while [[ $count != 100 ]]; do
if ln numbers numbers.lock
then
count=`expr $count + 1`
n=`tail -1 numbers`
expr $n + 1 >> numbers
rm numbers.lock
fi
done
我能做些什么来避免count=`expr $count + 1` 和n=`tail -1 numbers` 的竞争条件,这样当我同时运行两个脚本时,它只会达到 100,而不是 200。我研究过在多个网站上,但没有做出巨大的功能就没有简洁的答案。
【问题讨论】:
-
你为什么要同时运行这个脚本两次?为什么不使用安全的临时文件进行存储?
-
从
util-linux使用flock -
@EtanReisner 它是一个所以我们知道存在竞争条件并且需要避免它们
-
那么你试图阻止你的脚本同时运行两次?
-
没有我试图确保它们都可以运行,防止出现竞争条件
标签: bash race-condition