使用多线程来模拟这种情况的好方法是什么

What is a good method to use with multithreading to simulate this?

本文关键字:情况 方法 是什么 多线程 模拟      更新时间:2023-10-16

我正在visual studio中用c++编写一个程序,以便能够处理公园里的一条线。我让我所有的客户在公园排队,我希望能够使用openmp的多线程为他们提供服务。

当我放入pragma等时,我会为我创建的每个客户同时提供多个线程为同一客户服务,而不是我想要的。

例如,如果我有两个线程和四个客户,那么线程一做客户一,而线程2做客户二。然后我希望线程1同时处理客户3和线程2客户4。我不知道这是否可能,或者是否有更好的方法,但我需要使用openMP。

您可以将迭代的每个关联为客户,并以静态方式将它们(客户)分配给线程。

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

static:在这个分布中,线程在执行实际循环之前静态地预先计算它们的工作。默认情况下,迭代在线程之间平均分配。但是,如果为参数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 
}

动态时间表适用于的情况,迭代执行的工作在时间上可能变化很大。类似地,在你的情况下,如果你的消费者需要不同的时间才能得到服务。

相关文章: