2013-04-18 3 views
0

Я ищу концептуальный совет относительно управления большим количеством данных в моем проекте видения компьютера. У меня возникают проблемы: а) концептуализация и б) реализация концепции координации этого большого потока данных, поступающих как в качестве входных данных в программу из камер, так и генерируемых кодом.Управление многопоточными данными C++

Так данные я должен получить ручку на отделимо в пять отдельных «потоков», как я буду называть их:

Сырых кадров (Прямой вводом с камеры) целевых изображений (субкадры, взятыми от предыдущего потока изображения) отметки времени (для исходных кадров) данных автомобиля пространственного положения (GPS, углы тела и т.д. от беспроводного подключения последовательного порта к транспортному средству) Отношение данных Timestamps

общий поток, если мы должны были делать это полностью последовательно:

Frame = grabInputFrame(); 
TargetsVector = searchForTargets(Frame); 
VehicleData = getDataFromVehicle(); 

for each Target in TargetVector (
    targetData = processData(Target, VehicleData); 
    updateTargetLog(targetData); 
} 

Итак, вот сделка: Я пытаюсь сделать это с помощью потоков, поскольку алгоритмы очень интенсивно обрабатываются и не связаны последовательно (я имею в виду, что мне не нужны данные о цвете, чтобы получить GPS-координаты цели). НО, мне нужно координировать образы с целями и отметками времени с этими изображениями, поэтому я могу использовать правильные данные о транспортном средстве для правильного изображения и т. Д.

Мой друг предложил реляционный подход БД, но я использую C++. Интересно, есть ли способ имитировать реляционные БД в C++ (связать ли ключи с данными, например меткой времени или идентификатором цели, ассоциировать с данными или целевым изображением)? Будет ли подключение к SQL DB упростить управление? Существует ли существенное снижение производительности, связанное с этим? Самый важный момент здесь заключается в том, что, что бы я ни делал, я должен иметь возможность блокировать общие данные, чтобы я мог многократно использовать его.

Я надеюсь, что кто-то с некоторым опытом в таких иерархических структурах данных может пролить свет на мою ситуацию. Я заранее благодарю вас за ваши идеи и критику.

ответ

0

OpenMP может быть полезен для такой проблемы, есть встроенные функции, предусмотренные для блокировок и атомных операций. Поскольку у вас есть 5 параллельных операций, вы можете создать 5 потоков и на основе threadId выполнить различные операции.