我正在寻找一个跨平台的C线程库来执行以下操作:
启动一个长时间运行的线程,并在线程中等待事件发生;当这个事件发生时,做一些事情,然后等待下一个事件。
所以,我不需要进行并行计算,只需要在另一个线程中执行简单的任务。
为此使用OpenMP是否合适?
答案 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 ...
语句中定义共享变量以执行基本的线程间通信。
你描述问题的方式似乎有些扭曲。开发两个独立的程序会不会更简单? (取决于活动的性质。)