PRABAL VARSHNEY Ответов: 2

Запись данных в один файл с использованием многопоточности в linux


Я ищу пример, который создает несколько потоков, и все потоки записывают данные в один файл. Он должен быть в непрерывном цикле. Если размер файла составляет 1 кб, то остановите программу.

Что я уже пробовал:

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

KarstenK

Звучит немного похоже на недостаток дизайна, который разные потоки записывают в один файл. Может быть, вы создадите еще один поток записи файлов. ;-)

2 Ответов

Рейтинг:
2

Mohibur Rashid

Вам нужно иметь одну дополнительную нить.
* Writer, который записывает данные в файл.
* Вам нужно иметь очередь, рабочий поток будет толкать данные в очередь
* Обе очереди должны быть потокобезопасными.
* Каждый рабочий поток генерирует свои собственные данные и помещает их в очередь.
* Поток записи будет извлекать данные из очереди и записывать их в файлы.


Рейтинг:
1

Rick York

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