假设我有一个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();
}
我猜第一个答案将指向将每个操作分成 a section
,但sections
不保证将代码块分配给不同的线程。
可以task
吗?据我阅读后了解task
,每个代码块只执行一次,但分配的线程可以更改。
还有其他解决方案吗?
我想知道这一点,以了解我继承的代码pthreads
是否可以用 OpenMP 编写,它明确创建了多个线程。问题是某些线程没有巧妙地编写并且包含活动的等待循环。在这种情况下,如果将两个处于活动等待状态的对象分配给同一个 OpenMP 线程(因此按顺序执行),它们可能会陷入死锁。至少,我认为这可能发生在 s 上sections
,但我不确定task
s。