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

#define THREAD_COUNT 4

int values[THREAD_COUNT];
int neighbor_sums[THREAD_COUNT];

int main(void) {
#   pragma omp parallel num_threads(THREAD_COUNT)
    {
        int id = omp_get_thread_num();
        values[id] = id + 1;

#       pragma omp barrier

        int neighbor = (id + 1) % THREAD_COUNT;
        neighbor_sums[id] = values[id] + values[neighbor];
    }

    printf("Thread  Value  Neighbor sum\n");
    for (int t = 0; t < THREAD_COUNT; t++) {
        printf("%6d %6d %13d\n", t, values[t], neighbor_sums[t]);
    }
    return 0;
}
