C/C++ 中的多线程状态机实现

Posted

技术标签:

【中文标题】C/C++ 中的多线程状态机实现【英文标题】:Multithreaded State Machine Implementation in C/C++ 【发布时间】:2016-04-01 15:22:39 【问题描述】:

我们有一个软件设计,具有不同的线程:一个线程正在侦听套接字上的传入请求,并根据请求发送一个事件以供状态机线程读取。

状态机线程读取事件,执行操作(大部分时间通知另一个线程或产生一个),并等待新事件。

我一直在检查 epoll,但我也读到了 boost 有助于实现这一点。有什么建议吗?

这是在嵌入式 Linux 系统上编程的。

谢谢

【问题讨论】:

您能否向我们展示您迄今为止的尝试,以及为什么它们没有奏效? 使用 pthread 库。它在 C 中可用,很可能在 C++ 中可用。 我正在为我的线程使用 pthreads,但我更好奇如何实现它们之间的通信的理想实现。 嗯,大概是一个生产者-消费者队列。 condvar+mutex. 没有语言“C/C++”。选择一个,它将极大地影响实现和架构。 【参考方案1】:

对于线程:std::thread 或 boost::thread

对于套接字 I/O:boost::asio

对于状态机:boost::statechart 或 boost::msm

在一个很棒的图书馆里绝对有你需要的一切。

【讨论】:

嗯...太好了。如果它回答了这个问题:( @MartinJames 该操作要求提供建议。这是问题中唯一的问题。 Boost 附带全面的文档。我敢肯定他是个聪明的家伙,可以从那里得到它。我还能说什么?他没有要求设计大纲。如果他这样做了,他的问题将作为题外话被关闭。

以上是关于C/C++ 中的多线程状态机实现的主要内容,如果未能解决你的问题,请参考以下文章

学fpga(状态机)

如何在会话存储在状态服务器(Web Garden)中的多线程中使用会话变量

(转)利用CAS算法实现通用线程安全状态机

python多线程

Kafka consumer在项目中的多线程处理方式

Java的多线程实现生产/消费模式