Какой хороший метод использовать с многопоточностью для симуляции этого?

Я пишу программу на C ++ в Visual Studio, чтобы иметь возможность обрабатывать строки в парке. У меня все клиенты в очереди в парке, и я хочу иметь возможность обслуживать их, используя многопоточность с openmp.

Когда я добавляю прагму и тому подобное, у меня есть несколько потоков, обслуживающих одного и того же клиента в одно и то же время для каждого клиента, которого я создаю, а не того, что я хочу.

Я хочу, например, если бы у меня было два потока и четыре клиента, этот поток один для клиента, а поток 2 для клиента 2. Затем я хотел бы, чтобы поток 1 одновременно выполнял работу с клиентом 3 и потоком 2 с клиентом 4. Я не знаю, возможно ли это или есть лучший способ, но мне нужно использовать openmp. Спасибо за ваш вклад.

1

Решение

Вы можете связать каждого за Итерации в качестве клиента и назначить их (заказчика) в потоки в статической манере.

#pragma omp parallel for schedule(static, CHUNKSIZE)
for(i = 0; i < customer_max; i++)
{
// do something with customers

}

статический: В этом распределении потоки статически рассчитывают свою работу перед выполнением фактического цикла. Итерации по умолчанию делятся между потоками поровну. Однако, если вы укажете целое число для параметра CHUNKSIZE распределение будет распределять куски по размеру CHUNKSIZE смежных итераций к потокам.

В вашем примере с 2 потоками и 4 клиентами вы должны использовать CHUNKSIZE = 1. Таким образом, поток 0 будет выполнять как заказчик 0, так и 2, а поток 2 — клиент 1 и 3.

Если вы не укажете CHUNKSIZEпоток 0 будет исполнять первых 2 клиентов, а поток 1 — оставшихся 2.

С другой стороны, если вы предпочитаете, чтобы каждый поток динамически обслуживал клиентов, вы можете использовать динамическое распределение.

    #pragma omp parallel for schedule(dynamic)
for(i = 0; i < customer_max; i++)
{
// do something with customers

}

Динамическое расписание подходит для случая за с итерациями, которые выполняют работу, которая в зависимости от времени может сильно варьироваться. Аналогично в вашем случае, если у вас есть потребители, которым требуется разное время на обслуживание.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector