`ATOMIC_REF` — 변수의 값을 원자적으로 얻기
ATOMIC_REF — 변수의 값을 원자적으로 얻기
공유된 코어레이 변수의 값을 읽을 때도 '읽는 도중에 값이 바뀌는' 일을 막고 싶어요. atomic_ref는 변수의 값을 한 번에 원자적으로 읽어서 다른 변수에 담는 작업을 해요.
본문
시그니처
CALL ATOMIC_REF(VALUE, ATOM [, STAT])
설명
ATOMIC_REF(VALUE, ATOM)는 변수 ATOM의 값을 VALUE에 원자적으로 할당해요. 인자 순서가 '읽어서 담을 변수(VALUE) 먼저, 읽을 변수(ATOM) 다음'이라는 점을 주의하세요.
STAT가 주어지고 호출이 성공하면 STAT에 0을 넣어요. 호출이 실패하면 양수 값을 넣는데, coindexed ATOM의 경우 원격 이미지가 멈췄다면 ISO_FORTRAN_ENV의 STAT_STOPPED_IMAGE 값, 실패했다면 STAT_FAILED_IMAGE 값을 넣어요.
분류
원자적 서브루틴(Atomic subroutine)
인자
VALUE—ATOM과 같은 타입의 스칼라. 종류가 다르면ATOM의 종류로 변환돼요.ATOM—ATOMIC_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 이상