c++ - 实现线程监控机制所需的帮助

标签 c++ c multithreading synchronization pthreads

我正在开发多线程中间件环境。该框架基本上是一个捕获和流式传输框架。所以涉及到很多线程。

给大家简单介绍一下线程架构: 解复用器receiveVideoDecodeVideoDisplayVideo等都有单独的线程。每个线程执行其功能,例如:
解复用器提取音频、视频数据包
receivevideo接收视频数据包的 header +负载并删除负载
DecodeVideo接收有效负载并解码有效负载数据包
DisplayVideo 接收解码后的数据包并在显示屏上显示解码后的数据包

因此,每个线程将提取的数据提供给下一个线程。线程之间共享数据缓冲区,并且通过使用互斥体和信号量来同步缓冲区。同样,还有其他线程用于处理 ananlogvideoanalogaudio 等。

所有线程在初始化期间生成,但它们在信号量上保持阻塞状态,并根据输入(模拟/数字)选择性信号量发出信号,以便特定线程解除阻塞并继续执行操作他们的工作。在各个阶段,每个线程调用一些较低级别(驱动程序调用)来获取数据或写入数据等。这些调用是阻塞的,并且这些调用产生的错误(驱动程序返回损坏的数据、驱动程序停止)应该被处理,但当前尚未处理.

我想实现一个线程监视机制,其中线程将监视这些工作线程,并且如果发生错误情况将采取一些预防措施。据我了解,某些此类机制通常在 UI 或 MMI 应用程序中使用,例如看门狗。我正在寻找类似的东西。

我正在使用 pthreads,并且没有 Boost 或 STL(它是遗留代码,几乎是过程 C++)

关于特定框架或设计模式或开源项目的任何想法,它们可以做类似的事情,并且可能有助于实现我的要求的想法?

最佳答案

你能否对线程执行 ping 操作 - 定期在其常用输入队列上向每个线程发送一条消息,与所有其他正常内容交错,要求其返回其状态?当每个处理程序线程获取消息时,它会加载带有状态信息的消息 - 自上次 ping 以来已处理了多少消息、其输入/输出队列的长度、其驱动程序上次返回 OK 的时间以及此类统计信息 - 并将其排队回到你的线程监控机制。如果某些线程被卡住,您的 TMM 必须超时回复。

也许,您可以只在整个链中发布一条消息,每个线程在不同的字段中添加自己的状态。这意味着只有一次超时,之后您的 TMM 必须检查消息以查看它在链中的位置。

还有其他事情 - 我喜欢在 1 秒计时器上保留屏幕转储,包括队列长度和缓冲池深度。如果有东西堵塞,我通常可以大致知道它在哪里,(例如,一个池正在清空,一些队列正在增长 - 队列消费者被浪费了)。

Rgds, 马丁

关于c++ - 实现线程监控机制所需的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882184/

相关文章:

C++ #include 循环

c++ - "Rule of Three"的实现出错

c++ - 用 Visual Studio 2005 编译 C 程序?

java - 正确使用同步单例?

java - 从 Servlet 请求生成线程

c++ - N 条价格路径的平均估计不会随着 N 次迭代而改变

c++ - 如何在C++中使用<文件系统>访问相对父目录

C 缓冲区溢出显示消息(使用 Ubuntu 和 DDD)

c - 有没有一些带有C API的库可以画图?

c# - Parallel.ForEach 在迭代结束时表现得像每个规则一样