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

#define N 12

int owner[N];

int main(int argc, char *argv[]) {
    int thread_count = 3;
    if (argc > 1) {
        thread_count = (int)strtol(argv[1], NULL, 10);
    }

#   pragma omp parallel for num_threads(thread_count) schedule(runtime)
    for (int i = 0; i < N; i++) {
        owner[i] = omp_get_thread_num();
        usleep(i % 4 == 0 ? 5000 : 1000);  /* Every fourth iteration takes longer */
    }

    const char *schedule = getenv("OMP_SCHEDULE");
    printf("OMP_SCHEDULE: %s\n", schedule != NULL ? schedule : "(not set)");
    printf("Iteration:");
    for (int i = 0; i < N; i++) {
        printf(" %2d", i);
    }
    printf("\nThread:   ");
    for (int i = 0; i < N; i++) {
        printf(" %2d", owner[i]);
    }
    printf("\n");
    return 0;
}
