我想知道是否有人可以建议一种 C++ 数据结构,它具有环形缓冲区的功能(保证有限存储),但同时允许对指定数据的环形缓冲区进行高效的线程安全搜索?

最佳答案

Intel TBB containers 非常适合解决此类问题。
concurrent_unordered_map 应该为你的情况做这件事,但如果你真的想要一些环结构,你可以使用 concurrent_bounded_queue 并自己插入来模拟环行为(见下文)。但是,您将获得这种结构的线性搜索复杂度,而不是 map 中的对数复杂度。

template<class T>
struct concurrent_ring : tbb::concurrent_bounded_queue<T>
{
    void push(const T& t)
    {
        while(!tbb::concurrent_bounded_queue<T>::try_push(t))
           pop();
    }
}

关于c++ - 可搜索环形缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15668076/

10-12 18:14