`ATOMIC_REF` — 변수의 값을 원자적으로 얻기

ATOMIC_REF — 변수의 값을 원자적으로 얻기

공유된 코어레이 변수의 값을 읽을 때도 '읽는 도중에 값이 바뀌는' 일을 막고 싶어요. atomic_ref는 변수의 값을 한 번에 원자적으로 읽어서 다른 변수에 담는 작업을 해요.

출처: gfortran 문서 — ATOMIC_REF

본문

시그니처

CALL ATOMIC_REF(VALUE, ATOM [, STAT])

설명

ATOMIC_REF(VALUE, ATOM)는 변수 ATOM의 값을 VALUE에 원자적으로 할당해요. 인자 순서가 '읽어서 담을 변수(VALUE) 먼저, 읽을 변수(ATOM) 다음'이라는 점을 주의하세요.

STAT가 주어지고 호출이 성공하면 STAT에 0을 넣어요. 호출이 실패하면 양수 값을 넣는데, coindexed ATOM의 경우 원격 이미지가 멈췄다면 ISO_FORTRAN_ENVSTAT_STOPPED_IMAGE 값, 실패했다면 STAT_FAILED_IMAGE 값을 넣어요.

분류

원자적 서브루틴(Atomic subroutine)

인자

  • VALUEATOM과 같은 타입의 스칼라. 종류가 다르면 ATOM의 종류로 변환돼요.
  • ATOMATOMIC_INT_KIND 종류의 정수형이거나 ATOMIC_LOGICAL_KIND 종류의 논리형인 스칼라 코어레이 또는 coindexed 변수.
  • STAT (선택) — 기본 종류 정수형 스칼라 변수.

예제

program atomic
  use iso_fortran_env
  logical(atomic_logical_kind) :: atom[*]
  logical :: val
  call atomic_ref (atom, .false.)
  ! ...
  call atomic_ref (atom, val)
  if (val) then
    print *, "Obtained"
  end if
end program atomic

예제에서 call atomic_ref (atom, val)atom의 현재 값을 val에 담고, 그다음 val의 값(.true.인지)에 따라 메시지를 출력해요.

표준

Fortran 2008 이상; STAT를 쓰면 TS 18508 이상

함께 보기