`ATOMIC_FETCH_ADD` — 이전 값을 가져오며 원자적으로 더하기
ATOMIC_FETCH_ADD — 이전 값을 가져오며 원자적으로 더하기
덧셈을 원자적으로 하되, 더하기 전의 원래 값도 함께 알고 싶을 때가 있어요. atomic_fetch_add는 변수의 현재 값을 먼저 읽어서 따로 저장하고, 그다음 값을 더하는 작업을 한 번에 처리해요.
본문
시그니처
CALL ATOMIC_FETCH_ADD (ATOM, VALUE, OLD [, STAT])
설명
ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)는 ATOM의 값을 OLD에 원자적으로 저장하고, ATOM에 VALUE를 더해요.
STAT가 주어지고 호출이 성공하면 STAT에 0을 넣어요. 호출이 실패하면 양수 값을 넣는데, coindexed ATOM의 경우 원격 이미지가 멈췄다면 ISO_FORTRAN_ENV의 STAT_STOPPED_IMAGE 값, 실패했다면 STAT_FAILED_IMAGE 값을 넣어요.
분류
원자적 서브루틴(Atomic subroutine)
인자
ATOM—ATOMIC_INT_KIND종류의 정수형 스칼라 코어레이 또는 coindexed 변수.VALUE—ATOM과 같은 타입의 스칼라. 종류가 다르면ATOM의 종류로 변환돼요.OLD—ATOM과 같은 타입·종류의 스칼라.STAT(선택) — 기본 종류 정수형 스칼라 변수.
예제
program atomic
use iso_fortran_env
integer(atomic_int_kind) :: atom[*], old
call atomic_add (atom[1], this_image(), old)
end program atomic
예제에 나온 atomic_add 호출은 atom[1]의 현재 값을 old에 담고, atom[1]에 this_image()를 더해요.
표준
TS 18508 이상