`ATOMIC_FETCH_AND` — 이전 값을 가져오며 원자적 비트 AND
ATOMIC_FETCH_AND — 이전 값을 가져오며 원자적 비트 AND
비트 AND를 원자적으로 수행하면서 그전 값을 함께 알고 싶다면 atomic_fetch_and를 써요. ATOM의 현재 값을 OLD에 저장하고, ATOM을 VALUE와의 비트 AND 결과로 바꾸는 작업을 한 번에 처리해요.
본문
시그니처
CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])
설명
ATOMIC_FETCH_AND(ATOM, VALUE, OLD)는 ATOM의 값을 OLD에 원자적으로 저장하고, ATOM과 VALUE 사이의 비트 AND 결과로 ATOM을 정의해요.
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_fetch_and (atom[1], int(b'10100011101'), old)
end program atomic
이 예제는 atom[1]의 원래 값을 old에 담고, atom[1]을 int(b'10100011101')(=이진수 10100011101)과의 비트 AND 결과로 바꿔요.
표준
TS 18508 이상