私はすでに「pragma omp for」ループで OpenMP を使用しており、今すぐ OpenMP タスクを試してみたいと思っていました。しかし、2 つのタスクを並行して実行する単純なプログラムは機能しないようです。タスクの使用法を誤解しましたか、それとも何が問題なのですか?
#include<iostream>
#include<omp.h>
//ubuntu 12.04 LTS, gcc 4.6.3
//g++ test_omp.cpp -fopenmp
int main()
{
#pragma omp parallel
{
#pragma omp single
{
#pragma omp task
{
while(true)
{
usleep(1e6);
#pragma omp critical (c_out)
std::cout<<"task1"<<std::endl;
}
}
#pragma omp task
{
while(true)
{
usleep(1e6);
#pragma omp critical (c_out)
std::cout<<"task2"<<std::endl;
}
}
}
}
}
出力は次のとおりです。 task1 task1 task1 .....
したがって、2 番目のタスクは実行されていません。