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