Я также пытаюсь определить лучший способ решения этой проблемы для аналогичной ситуации (меньше участвующих процессов, но все та же основная проблема). Если вы не смогли использовать схему блокировки файлов, предложенную Иваном (например, система | язык | сетевой сервис не поддерживает ее), возможно, вы могли бы назначить одного из участников в качестве рефери. Все участники пишут уникальные семафоры, называют их «участник # .request», когда им нужен файл. Рефери опрашивает файловую систему для этих семафоров. Когда он его видит, он пишет обратно «участник # .lock» и удаляет запрос. Если он видит несколько одновременно, он выбирает один случайным образом (или первым по времени изменения файла) и удаляет только их запрос. Затем участник, выдавший блокировку, знает, что он может безопасно получить доступ к файлу. Когда участник завершает работу с файлом, он удаляет свою собственную блокировку. Пока есть замок, другие замки не выдаются судьей. Любые запросы, которые появляются после того, как пользователь удаляет свою блокировку, могут быть обработаны новой блокировкой без выдачи нового запроса, так что вы можете попросить других пользователей опросить их блокировку после отправки запроса. Вероятно, это то, что делает механизм блокировки в любом случае, за исключением, возможно, способности управлять блокировкой как очередью, которая поступает с запросами, обрабатываемыми в порядке их получения (то есть, если рефери использует время модификации). Кроме того, поскольку вы отвечаете за рефери, вы можете установить тайм-ауты для блокировок, позволяя ему создавать семафоры тайм-аута для процесса, который обрабатывает файл, а затем снимать блокировку (надеясь, конечно, что если этот процесс с блокировкой завершится, он сделал так красиво).