我正在使用 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/