Как работает этот пример канонического стада?

Когда нужно синхронизировать программы (сценарии оболочки) через файловую систему, я нашелflockрешение на основерекомендуемые (должно также работатьпо NFS). Канонический пример для использования изнутри скрипта (изhttp://linux.die.net/man/1/flock) является:

(
flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile 

Я неЯ не понимаю, почему вся эта конструкция обеспечивает атомарность. В частности, мне интересно, в каком порядкеflock -s 200 а также200>/var/lock/mylockfile выполняются, например, когдаbash выполняет эти строки кода. Этот порядок гарантирован / детерминирован? Как я понимаю, этодолжен быть детерминированным, если эта идиома должна работать. Но поскольку в дочернем процессе создается дочерняя оболочка, я не понимаю, как эти два процесса синхронизируются друг с другом. Я вижу только состояние гонки между этими двумя командами.

Я был бы признателен, если бы кто-то мог заставить мою путаницу по поводу этого исчезнуть и объяснить, почему эта конструкция может использоваться для безопасной синхронизации процессов.

В то же время, если кто-то знает, меня интересует, насколько безопасно выбирать какой-то произвольный файловый дескриптор (например,200 в примере), особенно в контексте большой файловой системы NFS со многими клиентами.

Ответы на вопрос(1)

Ваш ответ на вопрос