#include <cstdlib>
#include <omp.h>
#include <cstdio>
#include <thread>

#define THREADS 4
#define N 16

int main ( ) {
    int i;

#pragma omp parallel for num_threads(THREADS) schedule(dynamic)
    for (i = 0; i < N; ++i) {
    printf("Thread %d is doing iteration %d.\n", omp_get_thread_num( ), i);
        std::this_thread::sleep_for( std::chrono::milliseconds( 10*i ) );
    }
    return 0;
}
//Thread 2 is doing iteration 0.
//Thread 2 is doing iteration 4.
//Thread 3 is doing iteration 1.
//Thread 0 is doing iteration 2.
//Thread 1 is doing iteration 3.
//Thread 3 is doing iteration 5.
//Thread 0 is doing iteration 6.
//Thread 1 is doing iteration 7.
//Thread 2 is doing iteration 8.
//Thread 3 is doing iteration 9.
//Thread 0 is doing iteration 10.
//Thread 1 is doing iteration 11.
//Thread 2 is doing iteration 12.
//Thread 3 is doing iteration 13.
//Thread 0 is doing iteration 14.
//Thread 1 is doing iteration 15.
//
//Total:
// thread 0: 2+6+10+14=32
// thread 1: 3+7+11+15=36
// thread 2: 0+4+8+12=24
// thread 3: 1+5+9+13=28