我可以使用OpenMP执行简单的线程任务吗?

时间:2014-11-28 05:04:39

标签: openmp

我正在寻找一个跨平台的C线程库来执行以下操作:

启动一个长时间运行的线程,并在线程中等待事件发生;当这个事件发生时,做一些事情,然后等待下一个事件。

所以,我不需要进行并行计算,只需要在另一个线程中执行简单的任务。

为此使用OpenMP是否合适?

1 个答案:

答案 0 :(得分:2)

是的,OpenMP可以胜任这项任务,可能是你在C中最便携的解决方案,虽然不是你特定用例中最优雅的解决方案。

OpenMP基于fork-join model。因此,您需要在代码中的某处(使用启动线程的#pragma omp parallel语句),然后使用if在给定线程上执行特定任务。你想要实现的目标可以通过以下方式完成:

#include <omp.h>

...

#pragma omp parallel num_threads(2)
{
    if (omp_get_thread_num() == 0) {
        [do something]
    } else {
        [do something else]
    }
}

根据您的问题说明,您可以在main()中执行此操作,并通过调用各种功能来替换[do something]。其中一个函数是你在问题中描述的循环,另一个函数是你程序的其余部分。

根据您所讨论的事件的性质,您可能必须在#pragma omp ...语句中定义共享变量以执行基本的线程间通信。

你描述问题的方式似乎有些扭曲。开发两个独立的程序会不会更简单? (取决于活动的性质。)