На самом деле, чтобы избежать условий гонки, единственное безопасное решение - повторить попытку.
Если вы делаете что-то вроде:
while (file is locked)
no-op()
process file()
Вы рискуете другим процессом, попавшим между while guard и оператором файла процесса. Независимо от того, как реализовано ваше «ожидание доступности файла», если вы не можете гарантировать, что после разблокировки вы будете первым процессом, который получит к нему доступ, вы можете не быть тем первым пользователем.
Это более вероятно, что может показаться на первый взгляд, особенно если несколько человек смотрят файл, и, в частности, если они используют что-то вроде средства просмотра файловой системы. Конечно, даже тогда это не особенно вероятно ...