#include <omp.h>
#include <stdio.h>
int b;
int main()
{
int a = 1;
int c = 3;
b = 2;
#pragma omp threadprivate(b)
#pragma omp parallel firstprivate(c) num_threads(4)
{
int d = a + c;
#pragma omp atomic
c += 1;
#pragma omp atomic
a += 2;
#pragma omp atomic
d += 3;
b = d;
printf("a=%d b=%d c=%d d=%d\n", a, b, c, d);
}
printf("after: a=%d b=%d c=%d\n", a, b, c);
return 0;
}
I2luY2x1ZGUgPG9tcC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCmludCBiOwoKaW50IG1haW4oKQp7CiAgICBpbnQgYSA9IDE7CiAgICBpbnQgYyA9IDM7CiAgICBiID0gMjsKCiAgICAjcHJhZ21hIG9tcCB0aHJlYWRwcml2YXRlKGIpCgogICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZmlyc3Rwcml2YXRlKGMpIG51bV90aHJlYWRzKDQpCiAgICB7CiAgICAgICAgaW50IGQgPSBhICsgYzsKCiAgICAgICAgI3ByYWdtYSBvbXAgYXRvbWljCiAgICAgICAgYyArPSAxOwoKICAgICAgICAjcHJhZ21hIG9tcCBhdG9taWMKICAgICAgICBhICs9IDI7CgogICAgICAgICNwcmFnbWEgb21wIGF0b21pYwogICAgICAgIGQgKz0gMzsKCiAgICAgICAgYiA9IGQ7CgogICAgICAgIHByaW50ZigiYT0lZCBiPSVkIGM9JWQgZD0lZFxuIiwgYSwgYiwgYywgZCk7CiAgICB9CgogICAgcHJpbnRmKCJhZnRlcjogYT0lZCBiPSVkIGM9JWRcbiIsIGEsIGIsIGMpOwoKICAgIHJldHVybiAwOwp9Cg==