C++ 多线程数据管理

Posted

技术标签:

【中文标题】C++ 多线程数据管理【英文标题】:C++ multi-threaded data management 【发布时间】:2013-04-11 00:30:32 【问题描述】:

我正在寻找有关在我的计算机视觉项目中管理大量数据的概念性建议。我在 a) 概念化和 b) 实现一个概念来协调这个大数据流的概念,这些数据流既作为来自摄像机的程序的输入又由代码生成。

所以我必须处理的数据可以分成五个独立的“流”,我将它们称为:

原始帧(从相机直接输入) 目标图像(子帧,取自前一个图像流) 时间戳(用于原始帧) 车辆姿态数据(从无线串口连接到车辆的 GPS、车身角度等) 态度数据时间戳

如果我们完全按顺序执行此操作,一般流程将是:

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

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

所以这就是交易:我正在尝试通过线程来做到这一点,因为算法是处理器密集型的并且没有顺序相关(我的意思是我不需要颜色数据来获取 GPS 坐标目标)。但是,我确实需要将图像与目标和时间戳与这些图像进行协调,这样我就可以将正确的车辆数据用于正确的图像等。

我的一个朋友建议使用关系数据库方法,但我使用的是 C++。我想知道的是,有没有办法在 C++ 中模拟关系数据库(让键与数据相关联,例如与数据或目标图像相关联的时间戳或目标 ID)?连接到 SQL DB 会更容易管理吗?这样做是否会导致显着的性能损失?这里最重要的一点是,无论我做什么,我都必须能够锁定共享数据,这样我才能安全地多线程。

我希望在这样的分层数据结构方面有一定经验的人可以对我的情况有所了解。我提前感谢您的想法和批评。

【问题讨论】:

【参考方案1】:

OpenMP 可能有助于解决此类问题,为锁定和原子操作提供了内置函数。由于您有 5 个并行操作,您可以创建 5 个线程并根据 threadId 执行不同的操作。

【讨论】:

以上是关于C++ 多线程数据管理的主要内容,如果未能解决你的问题,请参考以下文章

C++并发与多线程 4_创建多个线程数据共享问题分析

linux c++多线程,创建两个子线程,主线程有个循环,循环内需要从两个子线程中获取数据,然后计算结果。

C++多线程

C++中的多线程,只检查信号量是不是被锁定

没有多线程的 C++ 套接字非同步/并行代码

带有进度条更新的 C++ 多线程套接字操作