error: expected ‘#pragma omp’ clause before ‘{’ token

error: expected ‘#pragma omp’ clause before ‘{’ token

我有一叠。每次从里面弹出一个元素,处理这个元素,根据一些结果判断这个元素是否应该被压回栈

代码如下。我使用 OpenMP 任务构造来实现并行性,因为不同元素的处理过程是独立的。但是 #pragma omp parallel#pragma omp single 两行我都得到了 error: expected ‘#pragma omp’ clause before ‘{’ token。我不知道原因。我也很好奇我使用 OpenMP 任务构造的正确性。

int processing_ele;

omp_set_num_threads(2);
#pragma omp parallel {
#pragma omp single {
    while (!stack_ele.empty()) {
        // pop
        int processing_ele = stack_edge_id.top();
        stack_ele.pop();

        // handle 
#pragma omp task
        Test(processing_ele);

        if (global_res[processing_ele].need_to_push) {
            stack_ele.push(processing_elec);
        }
    }
}
}

OpenMP specification你可以阅读

The syntax of an OpenMP directive is as follows:
#pragma omp directive-name [clause[ [,] clause] ... ] new-line

请注意指令末尾的新行,因此{必须在新行中:

#pragma omp parallel 
{
#pragma omp single 
{

#pragma omp parallel 
#pragma omp single 
{