Параллельная очередь C ++ с примитивными типами - PullRequest
0 голосов
/ 23 января 2020

Разве вы не можете иметь параллельную очередь примитивных типов? Я использую объект concurrent_queue из ppl.h в C ++ и инициализирую свою очередь следующим образом:

iQueue = new concurrency::concurrent_queue<int>;

Я замечаю, что если я добавлю sh int в очередь как таковую:

iQueue->push(num);

А затем попробуйте извлечь его из другого потока, я могу получить только одно значение из очереди - вот и все. Независимо от того, сколько раз я наберу sh, это просто одно значение, которое выходит. Разве параллельные очереди не работают с примитивными типами, такими как int?

Есть ли другой способ сделать это? Спасибо

Я использую для этого фреймворк Windows MF C, поэтому его будет сложнее воспроизвести. В основном, в моем основном потоке у меня есть:

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

И затем, ниже, который вызывается для каждого события, которое происходит (в MF C):

iQueue->push(num);

Тогда , в рабочем потоке у меня есть:

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

1 Ответ

0 голосов
/ 01 февраля 2020

Очереди, как правило, предназначены для работы только с отдельными элементами - элементы выдвигаются / выталкиваются по одному в порядке «первым пришел - первым вышел».

Что бы вы хотели сделать? Выполнять пакетные операции, где вы можете набрать sh или совать несколько предметов одновременно? Если да, сколько? 10, 100, вся очередь? Я знаю о предложениях для очередей без блокировки, которые поддерживают пакетные операции, но я не знаю ни о каких общедоступных реализациях. Однако, если вы можете предоставить немного больше информации о том, чего вы пытаетесь достичь, я мог бы помочь с решением.

...