Loop variable cannot appear in OpenMP* THREADPRIVATE clause

A loop variable may not appear in OpenMP* THREADPRIVATE clause.

The THREADPRIVATE directive specifies a list of variables that should be replicated, with each thread having its own copy. Such variables are unsuited for use as parallel Loop variables, and the OpenMP* specification forbids such usage.

ID

Observation

Description

1

OpenMP declaration

The location of the Loop directive

Example


#include <stdio.h>
#include <omp.h>

int i;
#pragma omp threadprivate(i)

int main(int argc, char **argv)
{
    // Bad: threadprivate variable cannot be used
    // as a loop counter in a parallel loop.
    
    #pragma omp parallel for ordered
    for (i = 1; i < 100; i++) {
        #pragma omp ordered
        printf("test: %d\n", i);
    }
    return 0;
}
        

Copyright © 2010, Intel Corporation. All rights reserved.