[Directive] critical
병렬프로그래밍에서 특별한 언급이 없으면, 모든 쓰레드들은 독립적이지 않은 공통변수들을 가지게 됩니다. 그래서 공통변수를 업데이트 시키는 동안에 다른 쓰레드에서 중간에 업데이트 하는 경우도 있습니다. 이러한 상황은 정확화지 않은 결과를 불러오게 됩니다. 그래서 공통변수가 업데이트 되는동안, 변하지 않도록 보호를 해주어야 합니다. atomic과 critical 디렉티브가 이러한 역할을 합니다. atomic 은 간단한 사칙연산이나 논리사칙연산에 대해서 보호해주는 역할을 하며, critical 디렉티브는 이를 포함한 좀더 범용적인 상황에서 보호를 해줍니다. critical 디렉티브 예제를 살펴봅시다. [Fortran 90] program Console implicit none !Variables integer i real max parameter SIZE = 10 real :: a(SIZE) do i=1,SIZE call RANDOM_NUMBER(a(i)) write(*,"(E10.5)"), a(i) end do max = a(1) !$omp parallel do num_threads(4) do i=2, SIZE if (a(i) > max) then ...