Что происходит, когда два или более потоков или процессов ftruncate (2) одного и того же файла? - PullRequest
2 голосов
/ 14 мая 2019

Насколько я понимаю, ftruncate(2) не может быть атомарным при расширении файла до 2 ГБ.

Но что именно происходит за кулисами? Я применил его, и, кажется, он работает нормально, когда файл расширяется несколькими потоками, но я не уверен, не приведет ли это к потере данных.

Кроме того, предположим, что 2 потока одновременно вызывают ftruncate(2), первый находится на пути к расширению файла до 2 ГБ. Между тем второй поток вызывает ftruncate(2). Теперь сомнение в том, что первый поток не завершил всю работу, а второй поток также запустил ftruncate, так что же будет?

Также, если это вызывает какие-либо проблемы, является ли использование блокировки файлов мудрым решением? Этот код, который я пишу, является библиотекой, поэтому, когда библиотека используется, я не буду знать состояние и конфигурацию процесса, в котором она используется. Есть ли вероятность тупика в таком случае?

...