fcntl () - это единственный API, который выбирается, поскольку он наименее сломан и является POSIX. Это единственный, который работает через NFS. Тем не менее, это также полная катастрофа, поскольку блокировки связаны с процессами, а не с файловыми дескрипторами. Это означает, что если вы заблокируете файл, а затем какой-нибудь другой поток или какая-либо библиотечная функция заблокирует / разблокирует его, ваша блокировка также будет нарушена. Кроме того, вы не можете использовать блокировки файловой системы для защиты двух потоков одного и того же процесса от помех друг другу. Кроме того, вам не следует использовать блокировки файлов для файлов, которые доступны более чем одному пользователю, поскольку это позволяет пользователям эффективно замораживать процессы друг друга.
В итоге: блокировка файлов в Unix создает больше проблем, чем решает. Прежде чем использовать его, вы должны быть действительно уверен, что вы полностью понимаете семантику.