Клепание динамических массивов
Jun. 5th, 2012 01:38 amИнтересный вопрос по сям, в аспекте мультитредевого программирования.
Положим один поток создает массив, заполняет его данными и передает указатель в другой тред, где массив обрабатывается и затем высвобождается. Первичный поток после передачи создает другой массив и процедура повторяется. Вопрос с указателями: для каждого массива придется создавать новый указатель, и как тут быть с "бесконечным" количеством имен указателей? Или есть какой-то более простой и ясный путь? Быть может после передачи указателя, можно его (указатель) использовать для следующего массива?
Надеюсь я нормально выразил свой вопрос.
З.Ы. Да, я программирую в отпуске и деревне, между прополкой грядок и прочими хозделами
Posted via LiveJournal app for iPad.
no subject
Date: 2012-06-04 09:52 pm (UTC)no subject
Date: 2012-06-04 10:05 pm (UTC)у тебя два потока? один создает массив, другой его обрабатывает?
тогда действительно нужна просто очередь потокобезопасная, добавляешь в нее указатель на массив в одном потоке, другой поток указатель подбирает, обрабатывает и ждет следующего элемента...
не понял насчет бесконечности имен...
no subject
Date: 2012-06-05 01:48 am (UTC)no subject
Date: 2012-06-05 07:16 am (UTC)no subject
Date: 2012-06-05 02:51 pm (UTC)Зачем вообще первй тред нужен? Чисто для того чтобы переложить данные из одного места в другое? А нафига это делать?
no subject
Date: 2012-06-05 03:56 pm (UTC)no subject
Date: 2012-06-05 04:46 pm (UTC)2) Что за предобработка, зачем ее делать в отдельном треде?
3) Если данные сыплются непрерывно и обработка занимает больше времени чем получение - на каком-то этапе кончится память %)))
4) Почему именно массивы? Мот проще в файлы распихивать? Они как бы для того и придумывались %))
no subject
Date: 2012-06-05 04:53 pm (UTC)На счет файлов мысль наверное самая светлая, хоть и медленнеая. Может использовать буфера фифо. Единственное что я пока туплю - это чтобы все было максимально быстро.
no subject
Date: 2012-06-05 05:27 pm (UTC)А пополнять отсортированный масив данными поддерживая его в отсортированном состоянии проще чем пересортировывать с нуля.
Да и вообще - можно деревья использовать - они для того и придумывались чтобы максимально быстро добавлять и искать данные. Правда там на оверхед надо смотреть - чтоб не получилось служебные данные занимают больше места чем полезные %)
ЗЫ. А еще бывают базы данных... %)
no subject
Date: 2012-06-05 03:43 am (UTC)no subject
Date: 2012-06-05 04:40 am (UTC)Насчет IPC советую почитать Стивенса: "UNIX: взаимодействие процессов".
no subject
Date: 2012-06-05 07:17 am (UTC)no subject
Date: 2012-06-05 05:07 am (UTC)В сях очередь, вероятно, придется велосипедить. Рекомендуется сделать в самой очереди:
- в методе send(), при превышении длины очереди усыплять текущий тред
- в методе receive() засыпать, пока не поступит сообщений.
Тогда никакой синхронизации тредов не потребуется. Да, если известна длина объектов, память лучше выделить сразу под все объекты.
no subject
Date: 2012-06-05 03:54 pm (UTC)А критично использование ANSI C? Если не критично, то я посоветовалбы использовать thread-safe queue из TBB (например).
no subject
Date: 2012-06-05 03:59 pm (UTC)no subject
Date: 2012-06-05 04:29 pm (UTC)no subject
Date: 2012-06-05 04:33 pm (UTC)no subject
Date: 2012-06-05 04:41 pm (UTC)no subject
Date: 2012-06-05 04:47 pm (UTC)no subject
Date: 2012-06-05 04:56 pm (UTC)no subject
Date: 2012-06-05 04:57 pm (UTC)no subject
Date: 2012-06-05 04:53 pm (UTC)Ну вот выше все правильно сказали.
Обычно для обработки такого используют циклический буфер, но это если хватает скорости для обработки данных на лету.
Иначе только в файлы складывать и обрабатывать отдельным потоком.
no subject
Date: 2012-06-05 04:58 pm (UTC)no subject
Date: 2012-06-05 05:08 pm (UTC)no subject
Date: 2012-06-05 05:22 pm (UTC)Ну или постоянно выделять память и складывать указатели в ФИФО на основе списка. Опять же - выделение памяти не самая быстра операция.
no subject
Date: 2012-06-05 05:47 pm (UTC)На мой взгялд тут вобще самому писать потоко-безопасный контейнер смысла нет, когда уже есть качественные реализации, причем бесплатные.
no subject
Date: 2012-06-05 06:28 pm (UTC)Все давным давно написано до нас.
Главное правильное средство выбрать.
no subject
Date: 2012-06-05 05:39 pm (UTC)