c++同步阶段多线程管道
C++ synced stages multi thread pipeline
如果有人问这个问题,我很抱歉,在问之前我已经尽力搜索了一个dup…
我正在实现一个视频处理应用程序,应该实时运行。它所做的处理可以很容易地分为4个阶段,每个阶段都对前一阶段产生的中间值进行操作。处理变得比1/30秒所能处理的要重,但如果我能把这个应用程序分成4个线程,并把它变成一个管道,每个阶段花费的时间就会少于这个,整个事情就会实时运行(有4帧延迟,这是完全可以接受的)。
我对多线程编程相当陌生,我遇到的问题是,我找不到在每帧开始时启动/停止每个线程的机制,所以它们都一起前进,在结束时每个"循环"提供一个完成的帧。我发现的所有框架/库似乎都担心使用队列和工作线程的负载平衡,但这不是我在这里需要的。四个线程就可以了,前提是我可以让它们保持同步。
谁能给我指出一个起点,使用c++ ?
谢谢。
假设4帧延迟是可以接受的,您可以使用列表节点池,每个节点都有一个指向帧缓冲区的指针和一个指向中间值的指针(NULL指针可用于指示流的结束)。作为多线程消息传递系统的一部分,每个线程都有自己的列表。第一个线程将从空闲池中获得一个帧节点,进行处理并将节点发送到下一个线程列表,依此类推,最后一个线程将节点返回到空闲池。
下面是一个示例文件复制程序的链接,该程序生成一个线程来执行写操作。它在消息传递函数中使用Windows线程、互斥锁和信号量,但消息传递函数很简单,可以在内部进行更改,以使用通用等价物,而无需更改其接口。main()函数可以更改为使用泛型线程,并设置互斥锁和信号量或类似的东西。
mtcopy.zip
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 通过安装信号处理程序关闭多线程应用程序
- Windows 服务中的多线程命名管道会锁定客户端
- c++同步阶段多线程管道