c++同步阶段多线程管道

C++ synced stages multi thread pipeline

本文关键字:多线程 管道 同步 c++      更新时间:2023-10-16

如果有人问这个问题,我很抱歉,在问之前我已经尽力搜索了一个dup…

我正在实现一个视频处理应用程序,应该实时运行。它所做的处理可以很容易地分为4个阶段,每个阶段都对前一阶段产生的中间值进行操作。处理变得比1/30秒所能处理的要重,但如果我能把这个应用程序分成4个线程,并把它变成一个管道,每个阶段花费的时间就会少于这个,整个事情就会实时运行(有4帧延迟,这是完全可以接受的)。

我对多线程编程相当陌生,我遇到的问题是,我找不到在每帧开始时启动/停止每个线程的机制,所以它们都一起前进,在结束时每个"循环"提供一个完成的帧。我发现的所有框架/库似乎都担心使用队列和工作线程的负载平衡,但这不是我在这里需要的。四个线程就可以了,前提是我可以让它们保持同步。

谁能给我指出一个起点,使用c++ ?

谢谢。

假设4帧延迟是可以接受的,您可以使用列表节点池,每个节点都有一个指向帧缓冲区的指针和一个指向中间值的指针(NULL指针可用于指示流的结束)。作为多线程消息传递系统的一部分,每个线程都有自己的列表。第一个线程将从空闲池中获得一个帧节点,进行处理并将节点发送到下一个线程列表,依此类推,最后一个线程将节点返回到空闲池。

下面是一个示例文件复制程序的链接,该程序生成一个线程来执行写操作。它在消息传递函数中使用Windows线程、互斥锁和信号量,但消息传递函数很简单,可以在内部进行更改,以使用通用等价物,而无需更改其接口。main()函数可以更改为使用泛型线程,并设置互斥锁和信号量或类似的东西。

mtcopy.zip