Использовать стандартные последовательные очереди отправки в C ++? - PullRequest
3 голосов
/ 20 октября 2011

Я хочу написать игрушечное приложение, которое будет запускаться с 1 экземпляра и расти до 5 кадров в секунду.В экземпляре есть метод run (), который должен выполняться <1 мс.Поэтому вместо реальных потоков я бы хотел использовать очередь последовательной отправки, чтобы взять задачу и выполнить ее.У меня есть многоядерный компьютер, и я не хотел бы блокировку, если бы я мог избежать этого.Я не хочу писать очередь последовательной отправки, но есть ли стандартная очередь последовательной отправки C ++ (0x?), Которую я могу использовать? </p>

Задача может добавить себя обратно или очередь может просто зацикливаться между каждым элементом.Это не имеет значения для меня

1 Ответ

2 голосов
/ 11 февраля 2012

Если вы хотите использовать стандартную очередь, но без блокировки, ищите реализацию очереди без блокировки.В C ++ нет стандартной очереди без блокировки. 11.

Вместо одной очереди, почему бы не использовать вектор задач на ядро ​​/ поток и циклически переключаться между ними?Например, если у вас есть 4 процессора и потока, для каждого из них есть вектор задач.Распределите задачи поровну между ними, а затем просто итерируйте их, как вы упомянули в циклическом комментарии в последнем предложении.Это не имело бы блокировки и имело бы такие же гарантии порядка обработки (то есть ни одного), как у очереди из нескольких потоков.

...