#c
#c
Вопрос:
Я работаю над симулятором лифта на c . У меня есть класс passenger, и программа создает «рандомизированные» экземпляры этого класса с разными начальными этажами и разными местами назначения внутри здания, а затем сохраняет их в векторе
vector<passenger> passengers;
Я работаю над алгоритмом отправки для 4 лифтов в здании. Однако из-за того факта, что алгоритм сравнивает все 4 лифта в здании, возможно, что пассажиру не может быть назначен лифт сразу (т. Е. Нет свободного лифта или лифта, имеющего достаточно места, идущего в том же направлении, что и пассажир).
Проблема:
Я хочу постоянно применять алгоритм ко всем элементам векторных пассажиров одновременно и не могу сделать это с помощью традиционного цикла for, поскольку он может застрять на полпути с экземплярами passenger вниз по вектору, которым может быть назначен лифт, оставленный в ожидании.
Кто-нибудь знает, есть ли способ сделать это?
Спасибо.
Ответ №1:
Вы можете использовать std::for_each с параллельной ExecutionPolicy .
Обратите внимание, что если вам нужно синхронизировать доступ к элементам, параллельное выполнение может оказаться медленнее, чем последовательное выполнение.
Комментарии:
1. Действительно ли политики параллельного выполнения уже реализованы каким-либо основным компилятором?
2. Извините, это что-то новенькое. Но из того, что я понимаю, вы имеете в виду, что если для каждого примера два экземпляра класса passenger отправляются на один и тот же уровень и имеют одинаковый начальный пункт назначения, и если только один лифт движется в том же направлении и имеет только одно свободное место, может быть медленнее решить, какой пассажир должен сестьлифт? И вы имеете в виду медленнее для пассажиров или для времени выполнения программы?
3. У @Konrad у Intel есть реализация , и я полагаю, что они уже внесли ее в llvm и gcc.
4. @Quentin_P Я имел в виду «более медленное время выполнения программы».
5. У @KonradRudolph MSVC есть статья об их реализации здесь… devblogs.microsoft.com/cppblog /…