使用多线程来模拟这种情况的好方法是什么
What is a good method to use with multithreading to simulate this?
我正在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
}
动态时间表适用于的情况,迭代执行的工作在时间上可能变化很大。类似地,在你的情况下,如果你的消费者需要不同的时间才能得到服务。
相关文章:
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 如何在没有实例的情况下获取非静态方法的类型?
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 如何在不使用静态矩形方法的情况下创建 IDOMPathGeometryPtr?
- 通常使用什么方法来检测时间情况?
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- C++ POCO - 如何在不使用 run() 方法的情况下启动线程池上的线程?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 循环依赖,在继承类的情况下使用覆盖方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 在没有堆的情况下用两种方法构造对象
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 有没有一种方法可以在不设置精度的情况下设置小数位数
- 如何在不迭代的情况下对数组中的每个元素调用方法
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- C ++:如何在不创建对象的情况下在主函数中调用方法