C ++消息处理设计讨论

时间:2017-02-08 03:19:00

标签: c++ multithreading list vector queue

我最近编写了一个多线程程序,它基本上处理两种类型的消息。收到第一个并将其推回列表中。让我们称之为Msg_1。第二个与Msg_1做同样的事情,我们称之为Msg_2。该程序需要监视Msg_2(在与Msg_1相同的网络连接上接收:即相同的端口/ ip。),这样当它收到有效的Msg_2时,它需要查看所有Msg_1并找到匹配。

现在我接收并推送由一个线程处理的两个列表,并由另一个线程处理搜索。我在代码中看到了一些陷阱,但它有效(现在......)。我对一般社区的最佳实践提出了一些问题,因为我也在学习这个项目...

首先关闭 - 如果我使用一个列表并且总是在Msg_2列表上回击但是从前面弹出会遇到我的列表保存方式的问题吗?即如果线程1正在推送而线程2正在弹出Msg_2会出现问题吗?我是应该锁定这个还是至少存储我正在搜索的内容然后快速弹出以便让线程1能够在需要时推送?

其次,我对Msg_1的处理方式感到非常不安......我把它推回到我的列表中。当我得到Msg_2时,我初始化一个迭代器来查看我的Msg_1列表,直到我到达终点或找到​​匹配 - 再次不是使用互斥锁。有没有更好的方法来做到这一点,以至于整个列表中的整个搜索持续时间都没有锁定? (该过程尝试匹配2个整数字段。)

任何见解都会有所帮助,因为我想再次学习此类解决方案的最佳实践。

我还应该提一下,我只能使用C ++ - 03并且无法获得提升。所以有一些我不能做的奇特事情......

0 个答案:

没有答案