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

#ifdef _OPENMP
    #include <omp.h>
#endif

void print_omp_info(const char taskname[], const int sleeptime) {
    double start_time = omp_get_wtime();
    #pragma omp critical
    printf("procs = %i, rank = %i, size = %i %s\n", omp_get_num_procs(), omp_get_thread_num(), omp_get_num_threads(), taskname);
    sleep(sleeptime);
    #pragma omp critical
    printf("Time consumption: %g\n", omp_get_wtime() - start_time);
}

int main(int argc, char *argv[]) {
    #ifdef _OPENMP
        #pragma omp parallel sections
        {

            #pragma omp section
            print_omp_info("task1", 1);

            #pragma omp section
            print_omp_info("task2", 2);
        }

        printf("Time resolution: %g\n", omp_get_wtick());

/*

procs = 4, rank = 3, size = 4 task2
procs = 4, rank = 0, size = 4 task1
Time consumption: 1.0002
Time consumption: 2.00018
Time resolution: 1e-09

*/

    #else
        printf("No OpenMP support\n");
    #endif

    return 0;
}