[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Несколько вопросов вразброс



On 21.07.2012 18:18, Stanislav Maslovski wrote:
>>> Ну и тут, строго говоря, имеет место быть race condition.
>> В упор не вижу. Где?
> А вот как раз перед строчкой, которую ты удалил.
> То есть, там классический race между проверкой семафора и его
> установкой, поскольку делается это двумя *отдельными* операциями,
> а должно делаться *атомарно*.
"
   pid=`cat $lockfile`
   if [ -n "$pid" ]; then
        echo "pid=$pid in lockfile; our pid=$$"
        if ps $pid ; then
                echo "Process exist; waiting"
        else
.....
 done
fi
echo $$>$lockfile
"

Т.е., если запущено два экземпляра, один мог получить отсутствие процесса с pid
в локфайле, затем получит тоже самое второй, если в это время произойдёт
переключение?
И, в итоге, будет две копии. А в локфайле будет pid последней, которая выполнила
echo?

Блин. Я недоглядел.
И как с этим бороться (кроме как flock)?

А блокировка в flock выполняется атомарно?


Reply to: