C++ 从并发 vector 中删除元素

标签 c++ tbb

我正在使用 Visual C++ 构建网络入侵检测系统,其组件之一是整个网络的 TCP session 管理器。 tcp session 数据存储在并发 vector 中,以便可以从其他线程访问它。我发现一旦 session 关闭,就没有简单的方法从并发 vector 中删除 session 。所以我的问题是你知道从并发 vector 中删除项目的最聪明的方法是什么。

智能 == 相当容易编程,不会对性能造成太大影响 谢谢

最佳答案

我会考虑在这里使用 std::set 而不是 vector - 特别是当存储的项目数量很大时。我想您也想经常执行查找。

对于 std::vector,从集合中搜索和移除是 O(log(n)) 复杂度而不是 O(n) > - 虽然 set 中的简单插入情况是 O(1) 而不是 O(log(n))

您还需要互斥量来保护所有这些操作。

关于C++ 从并发 vector 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11834810/

相关文章:

c++ - 如何在函数中初始化 CString& 参数

c++ - 显式默认析构函数禁用类中的默认 move 构造函数

c++ - TCP 套接字是安全的还是我应该始终检查用户

c++ - 在 Linux 中使用英特尔线程构建模块 (TBB)

c++ - 来自 TBB 节点的异步输入/输出和非均匀输出

C++ Integer 从 *char[] 中删除字符串

c++ - Boost.Python 包装层次结构避免菱形继承

c++ - 用 OpenMP 替换 TBB parallel_for

c++ - 不断变化的工作负载是否待定?

c++ - 了解 tbb::parallel_reduce 的并发性