2016-07-04 4 views
-3

Мне нужно скопировать много небольших потоков файлов в один поток файлов. Каждый поток файлов имеет свое собственное обозначенное положение, то есть FS1 идет первым, затем FS2 и так далее. Но в то время как многопоточность программы, поток, который заканчивает обработку, сначала добавляет ее во-первых, что вызывает ошибки.Указатели фильтра

Есть ли способ определить его положение, чтобы независимо от того, какую последовательность мы их добавим, они попадут в нужное место?

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

Этот вопрос является продолжением моего последнего, так как First обработалFS сначала перескакивает (копирует), поэтому нам нужно определить местоположение, в котором оно будет скопировано.

Пожалуйста, обратитесь к этому вопросу:

Sequential MT

+0

Это, безусловно, будет возможно решить вашу проблему. Сначала вам нужно четкое изложение проблемы. Кажется маловероятным, что многопоточный доступ к диску может привести к повышению производительности. Возможно, вы слишком усложняете. –

ответ

0

Вы не можете иметь несколько потоков записи в тот же файл потока в то же время, не окружив его с замком синхронизации, и вы бы также необходимо повторно искать поток взад и вперед, в зависимости от того, какой поток нужно записать в него в любой момент, поэтому он записывает с правильным смещением внутри файла. Это накладные расходы.

Вы можете, однако, иметь несколько потоков, которые используют разные потоки файлов для записи в тот же файл в то же время, при условии, что права совместного доступа между потоками совместимы, чтобы разрешить одновременную запись и сохранение данных. Предварительно задайте размер файла до нужной длины, а затем разделите разделы этой длины среди потоков по мере необходимости. Дайте каждому потоку собственный поток в целевой файл, сначала в поисках соответствующего начального смещения его назначенного раздела. Затем каждый поток может нормально записывать в соответствующий поток, без необходимости синхронизации с другими потоками или повторного поиска его потока. Просто убедитесь, что каждый поток не превышает границы назначенного раздела в файле, поэтому он не перезаписывает данные другого потока.

 Смежные вопросы

  • Нет связанных вопросов^_^