/* File: omp_lin_search.c * * Purpose: Illustrate that OpenMP won't parallelize a for loop with * a return statement. * * Compile: gcc -g -Wall -fopenmp -o omp_lin_search omp_lin_search.c * Run: Won't compile */ #include #include #include #define MAX 100000 int thread_count; int Lin_search(int A[], int n, int key); int main(int argc, char* argv[]) { int i, n, key; int* A; if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); exit(0); } thread_count = strtol(argv[1], NULL, 10); printf("How many elements?\n"); scanf("%d", &n); A = malloc(n*sizeof(int)); srandom(1); for (i = 0; i < n; i++) A[i] = random() % MAX; key = random() % MAX; i = Lin_search(A, n, key); if (i == -1) printf("%d is not in the list\n", key); else printf("%d is in position %d\n", key, i); return 0; } /* main */ int Lin_search(int A[], int n, int key) { int i; /* This is going to cause a compile-time error */ # pragma omp parallel for num_threads(thread_count) \ default(none) shared(A, n, key) private(i) for (i = 0; i < n; i++) if (key == A[i]) return i; return -1; } /* Lin_search */