【问题标题】:C++ Concurrent Queue with Primitive Types具有原始类型的 C++ 并发队列
【发布时间】:2020-01-22 21:18:15
【问题描述】:

你不能有一个原始类型的并发队列吗?我在 C++ 中使用 ppl.h 中的 concurrent_queue 对象,并且正在初始化我的队列:

iQueue = new concurrency::concurrent_queue<int>;

我注意到如果我将一个 int 推送到队列中:

iQueue->push(num);

然后尝试从另一个线程中弹出它,我只能从队列中获取一个值 - 就是这样。无论我推多少次,它都只是一个单一的值。并发队列是否不适用于 int 等原始类型?

还有其他方法可以做到这一点吗?谢谢

我为此使用了 Windows MFC 框架,因此可能更难以重现。基本上,在我的主线程中,我有:

concurrency::concurrent_queue<int>* iQueue = new concurrency::concurrent_queue<int>;

然后,对于发生的每个事件(在 MFC 中)都会调用以下代码:

iQueue->push(num);

然后,在一个工作线程中我有:

while (1) {
    int temp;
    if (queue->try_pop(temp)) {
        // do something
    }
}

【问题讨论】:

标签: c++ multithreading mfc queue


【解决方案1】:

队列通常设计为仅对单个项目进行操作 - 项目以先进先出的顺序一次推送/弹出一个。

你想做什么?执行批处理操作,您可以一次推送或弹出多个项目?如果有,有多少? 10、100,整个队列?我知道支持批处理操作的无锁队列的建议,但我不知道任何普遍可用的实现。但是,如果您能提供更多关于您想要实现的目标的信息,我或许可以提供解决方案。

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多