Я рискну догадаться ... одна вещь, для которой это может быть использовано, для параллельных вычислений. Допустим, у вас есть два потока, выполняющих вычисления с высокой степенью параллелизации, и вам нужно, чтобы данные были записаны в один файл. Вы также можете заранее определить размер, необходимый для хранения выходных данных каждого потока (скажем, 50 МБ).
Итак, выделите файл размером 100 МБ, начните запись потока 1 со смещением 0, а поток 2 начните с 50 МБ. Когда потоки завершатся, у вас будет один составной файл (в противном случае, используя отдельные файлы, вам нужно будет добавить результат из потока № 2 в поток № 1).
ASCII Art Попытка
==============================
| 50MB | 50MB | [100 MB Total FileSize]
| | |
==============================
^ ^
| |
Thread 1 Thread 2
Все это говорит, я никогда не делал этого. Это может даже не работать! Можно предположить, что вы просто делитесь дескриптором файла / потоком между потоками, используя какой-то другой механизм синхронизации, но тогда вам также придется сбросить смещение для каждого потока. Возможно, один или другой более эффективен.
С одной стороны, может быть много перебрасываний диска, если оба потока всегда пишут simeltanouesly. И наоборот, синхронизация записей может свести на нет преимущества параллелизма, если существует много конфликтов по поводу блокировки записи. И, как часто говорят, профиль и тест!
В любом случае, мне также любопытен сценарий "реальной жизни", в котором был использован общий доступ для записи, и я буду ждать дополнительных ответов!