首先解释一下我正在尝试做的事情:
我的计划是编写一个使用 boost::asio 库实现的套接字流的程序,该库将数据馈送到使用 boost:spirit::qi 实现的解析器。解析器将获取数据包并填充数据包对象,然后将该对象附加到数据包对象链表的末尾。数据包处理器将读取列表中的第一个对象并进行处理,然后移动到下一个项目并删除第一个。
我决定使用链表,因为如果我使用 std::queue,每次流添加一个数据包或处理器删除一个数据包时,我都必须锁定整个容器,这会使两个线程或多或少串行运行,这我想避免。另外,队列类倾向于复制整个对象,而链表思想的好处是创建一次对象,然后只指向它。为了避免将整个业务序列化,我打算在每个节点中放置 boost:mutex 互斥锁并从那里锁定它们。这个想法是让套接字流创建列表并立即锁定第一个节点,从解析器填充节点,创建下一个节点并锁定它,然后解锁第一个节点并移动到下一个节点进行工作。这边有' s 永远不会有一个未锁定的节点悬垂在数据包处理器可能跳转到并在套接字流鼻子下删除的末尾。数据包处理器将检查第一个节点并尝试锁定它,如果它锁定它,那么它将进行处理然后解锁它,获取下一个节点然后删除第一个节点。这种方式序列化仅限于包处理器赶上套接字流类的那些时间。
所以现在我的问题是,在我开始实际实施之前,这听起来是个好主意吗?我已经在一个简单的测试中尝试过它,它似乎工作正常,只要我实现异常处理并注意释放我分配的任何内存,我想不出任何严重的问题,但如果有人能想到我忽略了这个想法的任何问题,我将不胜感激。另外,我将不胜感激任何其他人可能会提出的任何其他建议作为替代方案,或者可能会使这个想法更好地发挥作用。
提前致谢!