【发布时间】:2013-11-08 17:04:31
【问题描述】:
假设我有一个生成一些数据的Writer 类和一个使用它的Reader 类。我希望它们一直在不同的线程下运行。如何使用 OpenMP 做到这一点?
这是我想要的:
class Reader
{
public:
void run();
};
class Writer
{
public:
void run();
};
int main()
{
Reader reader;
Writer writer;
reader.run(); // starts asynchronously
writer.run(); // starts asynchronously
wait_until_finished();
}
我猜第一个答案将指向将每个操作分成section,但sections 并不能保证将代码块分配给不同的线程。
tasks 可以吗?据我阅读task后的理解,每个代码块只执行一次,但分配的线程可以改变。
还有其他解决方案吗?
我想知道这一点,以了解我继承的使用 pthreads(显式创建多个线程)的代码是否可以使用 OpenMP 编写。问题是某些线程没有巧妙地编写并且包含活动的等待循环。在这种情况下,如果将两个处于活动等待状态的对象分配给同一个 OpenMP 线程(因此按顺序执行),它们可能会陷入死锁。至少,我认为sections 会发生这种情况,但我不确定tasks。
【问题讨论】:
标签: c++ multithreading openmp