#include <stdio.h>
#include <omp.h>
int x = 5 ;
int main( ) {
printf ( "=== BEFORE PARALLEL REGION ===" ) ; printf ( "\n Global x address: %p" , ( void * ) & x
) ; printf ( "\n Global x value: %d\n " , x
) ;
#pragma omp parallel sections private(x)
{
#pragma omp section
{
printf ( "\n x address: %p" , ( void * ) & x
) ; printf ( "\n x value BEFORE init: %d (garbage)" , x
) ;
x = 5 ;
printf ( "\n x value AFTER init: %d" , x
) ;
x++;
printf ( "\n x value AFTER increment: %d" , x
) ; printf ( "\n x=%d from first (private)" , x
) ; }
#pragma omp section
{
printf ( "\n x address: %p" , ( void * ) & x
) ; printf ( "\n x value BEFORE init: %d (garbage)" , x
) ;
x = 5 ;
printf ( "\n x value AFTER init: %d" , x
) ;
x--;
printf ( "\n x value AFTER decrement: %d" , x
) ; printf ( "\n x=%d from second (private)" , x
) ; }
}
printf ( "\n \n === AFTER PARALLEL REGION ===" ) ; printf ( "\n Global x address: %p" , ( void * ) & x
) ; printf ( "\n Global x value: %d" , x
) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxvbXAuaD4KCmludCB4ID0gNTsKCmludCBtYWluKCkgewogIHByaW50ZigiPT09IEJFRk9SRSBQQVJBTExFTCBSRUdJT04gPT09Iik7CiAgcHJpbnRmKCJcbkdsb2JhbCB4IGFkZHJlc3M6ICVwIiwgKHZvaWQqKSZ4KTsKICBwcmludGYoIlxuR2xvYmFsIHggdmFsdWU6ICVkXG4iLCB4KTsKICAKICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBzZWN0aW9ucyBwcml2YXRlKHgpCiAgewogICAgI3ByYWdtYSBvbXAgc2VjdGlvbgogICAgewogICAgICBwcmludGYoIlxuICB4IGFkZHJlc3M6ICVwIiwgKHZvaWQqKSZ4KTsKICAgICAgcHJpbnRmKCJcbiAgeCB2YWx1ZSBCRUZPUkUgaW5pdDogJWQgKGdhcmJhZ2UpIiwgeCk7CiAgICAgIAogICAgICB4ID0gNTsKICAgICAgcHJpbnRmKCJcbiAgeCB2YWx1ZSBBRlRFUiBpbml0OiAlZCIsIHgpOwogICAgICAKICAgICAgeCsrOwogICAgICBwcmludGYoIlxuICB4IHZhbHVlIEFGVEVSIGluY3JlbWVudDogJWQiLCB4KTsKICAgICAgcHJpbnRmKCJcbiAgeD0lZCBmcm9tIGZpcnN0IChwcml2YXRlKSIsIHgpOwogICAgfQogICAgCiAgICAjcHJhZ21hIG9tcCBzZWN0aW9uCiAgICB7CiAgICAgIHByaW50ZigiXG4gIHggYWRkcmVzczogJXAiLCAodm9pZCopJngpOwogICAgICBwcmludGYoIlxuICB4IHZhbHVlIEJFRk9SRSBpbml0OiAlZCAoZ2FyYmFnZSkiLCB4KTsKICAgICAgCiAgICAgIHggPSA1OwogICAgICBwcmludGYoIlxuICB4IHZhbHVlIEFGVEVSIGluaXQ6ICVkIiwgeCk7CiAgICAgIAogICAgICB4LS07CiAgICAgIHByaW50ZigiXG4gIHggdmFsdWUgQUZURVIgZGVjcmVtZW50OiAlZCIsIHgpOwogICAgICBwcmludGYoIlxuICB4PSVkIGZyb20gc2Vjb25kIChwcml2YXRlKSIsIHgpOwogICAgfQogIH0KICAKICBwcmludGYoIlxuXG49PT0gQUZURVIgUEFSQUxMRUwgUkVHSU9OID09PSIpOwogIHByaW50ZigiXG5HbG9iYWwgeCBhZGRyZXNzOiAlcCIsICh2b2lkKikmeCk7CiAgcHJpbnRmKCJcbkdsb2JhbCB4IHZhbHVlOiAlZCIsIHgpOwogIHByaW50ZigiXG5cbiIpOwogIAogIHJldHVybiAwOwp9