gpt4 book ai didi

c++ - C++中Concurrent Queue + map的实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:45 28 4
gpt4 key购买 nike

我不太擅长数据结构,所以这可能是个很愚蠢的问题。我正在寻找一种方法来实现队列 + map 的混合行为。

我目前正在使用 tbb::concurrent_bounded_queue (记录在 Intel's developer zone )来自 www.threadingbuildingblocks.org在多线程单生产者单消费者进程中。该队列具有市场数据报价对象,并且流程的生产者端实际上对时间高度敏感,因此我需要的是一个以市场数据标识符(如 USDCAD、EURUSD)为键的队列。 Value 指向(通过 unique_ptr )我收到的有关此 key 的最新市场数据报价。

所以,假设我的队列有 5 个元素对应 5 个唯一标识符,突然我们在队列中的第 3 个位置获得标识符的更新市场数据报价,然后我只存储最新的值并丢弃我之前拥有的值.所以,基本上我只是将我的 unique_ptr 移动到这个 key 的新市场数据报价。

好像和concurrent_bounded_queue<pair<string, unique_ptr<Quote>>>类似但以该对的第一个元素为键。

我不确定这是否已经在第三方库(可能是 tbb 本身)中可用,或者如果它是标准数据结构,它被称为什么。

我将非常感谢任何对此的帮助或指导。

谢谢。

最佳答案

首先,观察我们可以很容易地写...

int idn_to_index(idn); // map from identifier to contiguous number sequence

...使用 std::map 并不重要或 std::unordered_map , 在排序中进行二分查找 std::vector ,您自己的逐字符硬编码解析器....

然后生产者可以:

  1. 更新(使用互斥体)std::vector<unique_ptr<Quote>>[idn_to_index(idn)]

  2. 将索引发布到concurrent_bounded_queue<int>

消费者:

  1. 弹出索引

  2. 比较std::vector<unique_ptr<Quote>>中的指针在 [index] 到它自己的最后一次看到的指针数组,如果它们不同,则处理引用

这里的想法不是避免在队列中有重复的特定于标识符的索引,而是确保那些中最旧的仍然触发对最新报价的处理,并且不那么陈旧的队列条目被无害地忽略,直到数据真的又更新了。

关于c++ - C++中Concurrent Queue + map的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25027353/

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