#include <cstdlib>
#include <omp.h>
#include <cstdio>
#include <thread>
#include <random>
#define THREADS 8
#define N 32
int main ( ) {
int i;
std::random_device rd;
std::mt19937 gen( rd() );
std::uniform_int_distribution<> dis(5, 50);
int i_long = 7;
#pragma omp parallel for num_threads(THREADS) schedule(dynamic) shared(gen,i_long)
for (i = 0; i < N; ++i) {
printf("Thread %d is doing iteration %d.\n", omp_get_thread_num( ), i);
if ( i == i_long ) {
std::this_thread::sleep_for( std::chrono::milliseconds( 400 ) );
} else {
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
// std::this_thread::sleep_for( std::chrono::milliseconds( 10*dis(gen) ) );
}
return 0;
}
//Output sorted by thread:
//Thread 0 is doing iteration 0
//Thread 0 is doing iteration 10
//Thread 0 is doing iteration 16
//Thread 0 is doing iteration 25
//Thread 1 is doing iteration 7 <<---- long sleep
//Thread 2 is doing iteration 1
//Thread 2 is doing iteration 11
//Thread 2 is doing iteration 21
//Thread 2 is doing iteration 28
//Thread 3 is doing iteration 15
//Thread 3 is doing iteration 22
//Thread 3 is doing iteration 30
//Thread 3 is doing iteration 5
//Thread 3 is doing iteration 8
//Thread 4 is doing iteration 14
//Thread 4 is doing iteration 19
//Thread 4 is doing iteration 26
//Thread 4 is doing iteration 29
//Thread 4 is doing iteration 6
//Thread 5 is doing iteration 13
//Thread 5 is doing iteration 18
//Thread 5 is doing iteration 24
//Thread 5 is doing iteration 4
//Thread 6 is doing iteration 12
//Thread 6 is doing iteration 2
//Thread 6 is doing iteration 20
//Thread 6 is doing iteration 27
//Thread 7 is doing iteration 17
//Thread 7 is doing iteration 23
//Thread 7 is doing iteration 3
//Thread 7 is doing iteration 31
//Thread 7 is doing iteration 9