gpt4 book ai didi

c++ - C++中的多线程链表

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:49 27 4
gpt4 key购买 nike

首先解释一下我正在尝试做的事情:

我的计划是编写一个带有套接字流的程序,该套接字流使用 boost::asio 库实现,该库将数据提供给使用 boost:spirit::qi 实现的解析器。解析器将获取数据包并填充一个数据包对象,然后将该对象附加到数据包对象链表的末尾。数据包处理器将读取列表中的第一个对象并进行处理,然后移至下一个项目并删除第一个。

我决定使用链表,因为如果我使用 std::queue,每次流添加一个数据包或处理器删除一个数据包时,我都必须锁定整个容器,这会使两个线程或多或少地运行串行,我想避免。此外,队列类倾向于复制整个对象,而链表思想的好处是创建一次对象,然后指向它。为了避免序列化整个业务,我打算在每个节点中放置 boost:mutex 互斥体并从那里锁定它们。这个想法是让套接字流创建列表并立即锁定第一个节点,从解析器填充节点,创建下一个节点并锁定它,然后解锁第一个节点并移动到下一个节点进行工作。这样一来,就永远不会有一个未锁定的节点悬卡在数据包处理器可能跳到并在套接字流 Nose 下删除的末端。数据包处理器将检查第一个节点并尝试锁定它,如果它锁定它然后它将进行处理然后解锁它,获取下一个节点然后删除第一个节点。这种方式的序列化仅限于数据包处理器 catch 套接字流类的那些时间。

现在我的问题是,在我开始实际实现之前,这听起来是个好主意吗?我已经在一个简单的测试中尝试过它,它似乎工作正常,我想不出任何严重的问题,只要我实现异常处理并注意释放我分配的任何内存,但如果有人能想到如果我忽略了这个想法的任何问题,我将不胜感激。此外,我将不胜感激任何人可能提出的任何其他建议,这些建议可以作为替代方案,或者可以使这个想法更好地发挥作用。

提前致谢!

最佳答案

查看这篇文章,它是关于多个消费者的,但仍然很精彩:

Measuring Parallel Performance: Optimizing a Concurrent Queue

关于c++ - C++中的多线程链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6557656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com