#include <stdio.h>
#include <omp.h>
int main()
{
int sum_atomic = 0;
int sum_critical = 0;
// Atomic section
#pragma omp parallel for
for (int i = 0; i < 51; i++) {
#pragma omp atomic
sum_atomic += i;
}
// Critical section
#pragma omp parallel for
for (int i = 0; i < 51; i++) {
#pragma omp critical
{
for (int j = 0; j < 100; j++) {
sum_critical += i + j;
}
}
}
printf("Sum using atomic: %d\n", sum_atomic
); printf("Sum using critical: %d\n", sum_critical
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxvbXAuaD4KaW50IG1haW4oKSAKewoJCWludCBzdW1fYXRvbWljID0gMDsKCQlpbnQgc3VtX2NyaXRpY2FsID0gMDsKCQkvLyBBdG9taWMgc2VjdGlvbgoJCSNwcmFnbWEgb21wIHBhcmFsbGVsIGZvcgoJCWZvciAoaW50IGkgPSAwOyBpIDwgNTE7IGkrKykgewoJCQkjcHJhZ21hIG9tcCBhdG9taWMKCQkJc3VtX2F0b21pYyArPSBpOwoJCX0KCQkvLyBDcml0aWNhbCBzZWN0aW9uCgkJI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yCgkJZm9yIChpbnQgaSA9IDA7IGkgPCA1MTsgaSsrKSB7CgkJCSNwcmFnbWEgb21wIGNyaXRpY2FsCgkJCXsKCQkJCQoJCQkJZm9yIChpbnQgaiA9IDA7IGogPCAxMDA7IGorKykgewoJCQkJCXN1bV9jcml0aWNhbCArPSBpICsgajsKCQkJCX0KCQkJfQoJCX0KCQlwcmludGYoIlN1bSB1c2luZyBhdG9taWM6ICVkXG4iLCBzdW1fYXRvbWljKTsKCQlwcmludGYoIlN1bSB1c2luZyBjcml0aWNhbDogJWRcbiIsIHN1bV9jcml0aWNhbCk7CgoJCXJldHVybiAwOwoJfQo=