program atom
!$ use OMP_LIB
implicit none
integer :: rank, tnot
real(8) :: val
val = 10.0d0
!$OMP PARALLEL SHARED(val) PRIVATE(rank) DEFAULT(SHARED)
rank = OMP_GET_THREAD_NUM (); tnot = OMP_GET_NUM_THREADS()
!$OMP ATOMIC
val = val - 1
! !$OMP BARRIER
!$OMP CRITICAL(CRI0)
val = val**2
val = sqrt(val)
!$OMP END CRITICAL(CRI0)
print *,rank,val
!$OMP END PARALLEL
print *,val
end program atom
#include
#include
#include
#include
int main(int argc, char** argv)
{
int rank, tnot;
double val;
val = 10.0;
#pragma omp parallel shared(val) private(rank) default(shared)
{
rank = omp_get_thread_num();
tnot = omp_get_num_threads();
#pragma omp atomic
val-=1;
#pragma omp critical(cri0)
{
val = val*val;
val = sqrt(val);
}
printf("Rank=%d Val=%lf\n",rank,val);
}
printf("Val=%lf\n",val);
return 0;
}