首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程C应用程序框架或模式

问多线程C应用程序框架或模式
EN

Stack Overflow用户
提问于 2012-02-28 08:41:54
回答 1查看 838关注 0票数 5

我已经在一个多线程C (Linux)应用程序工作了一段时间-一个录像机,它有线程的音频和视频捕获,编码,多路复用和写入。

我一开始使用p线程操作将它放在一起,但现在我试图扩展它,以支持更多的状态和重构与锁定、设置标志和发送条件有关的重复出现的代码块。

到目前为止,我想出的是这样的:

  • 每个线程应该有一个互斥锁和两个条件-一个是唤醒线程,另一个是指示线程已经完成了另一个线程可能等待的一些工作。
  • 数据队列由某个线程“拥有”并使用该线程的锁进行保护。
  • 每个线程都需要“活动”和“非活动”状态的概念,以及在完成这些状态和信号之间移动的能力。

。

我计划将公共元素存储在一个结构中,并有一个可以循环起来启动、检查和停止所有线程的结构数组。

当这变成一个更通用的线程支持模型时,我认为我是在重新发明轮子,所以我会在这里问一下,是否应该应用一些已知的模式。

EN

回答 1

Stack Overflow用户

发布于 2012-02-28 18:14:48

您的想法提醒我许多在QP状态机框架中实现的活动对象计算模型。具体来说,QP/C和QP/C++框架已经移植到POSIX (包括Linux、BSD等)。这个端口在Application "QP和Linux“中有详细的描述,可在:http://www.state-machine.com/linux/AN_QP_and_Linux.pdf上找到。

以下是到Linux的QP端口的亮点:

  • 每个状态机在自己的p线程中执行。使用互斥和条件变量实现的事件队列上的p线程块。当事件队列接收到事件时,线程将解除阻塞,该事件由与此线程关联的状态机处理。(这是众所周知的活动对象计算模型。)
  • 事件队列是由活动对象线程拥有的。
  • 每个线程都有整个分层状态机,因此它可以有状态“活动”或“非活动”。分层状态机(UML statecharts)允许您在较高级别状态下指定操作和转换,并在嵌套状态中重用此行为。这将抵消状态--与传统的FSM之间的“爆炸”转换。

。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9478753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档