ATOMIC_AND — 원자적으로 비트 AND 정의하기
ATOMIC_AND — 원자적으로 비트 AND 정의하기
여러 이미지가 같은 변수의 비트를 조작할 때도 데이터 경쟁을 피해야 해요. 읽고 쓰는 사이에 다른 이미지가 끼어들면 비트 연산 결과가 틀어질 수 있으니까요. ATOMIC_AND는 ATOM의 값과 VALUE의 비트 AND 결과를 ATOM에 원자적으로 정의해 주는 내장 서브루틴이에요.
본문
시그니처
CALL ATOMIC_AND (ATOM, VALUE [, STAT])
설명
ATOMIC_AND(ATOM, VALUE)는 ATOM의 값과 VALUE의 값 사이의 비트 AND 결과로 ATOM을 원자적으로 정의해요. STAT가 주어졌을 때 호출이 성공하면 STAT에 0이 저장돼요. 호출이 실패했는데 STAT가 주어졌다면 양수 값이 저장되는데, 특히 코인덱스된(coindexed) ATOM의 경우 원격 이미지가 멈췄다면 ISO_FORTRAN_ENV의 STAT_STOPPED_IMAGE 값이, 원격 이미지가 실패했다면 STAT_FAILED_IMAGE 값이 저장돼요.
클래스
원자적 서브루틴(Atomic subroutine)이에요.
인자
- ATOM —
ATOMIC_INT_KINDkind를 가진 정수 타입의 스칼라 코레이나 코인덱스된 변수예요. - VALUE —
ATOM과 같은 타입의 스칼라예요. kind가 다르면ATOM의 kind로 변환돼요. - STAT (선택) — 기본 kind의 스칼라 정수 변수예요.
예제
program atomic
use iso_fortran_env
integer(atomic_int_kind) :: atom[*]
call atomic_and (atom[1], int(b'10100011101'))
end program atomic
이진 리터럴 b'10100011101'을 int로 바꿔 이미지 1의 atom과 비트 AND를 원자적으로 수행해요.
표준
TS 18508 또는 그 이후예요.
더 알아보기
- 원자적 연산 계열에는
ATOMIC_OR,ATOMIC_XOR,ATOMIC_ADD,ATOMIC_FETCH_AND도 있어요.ISO_FORTRAN_ENV모듈의 상수와 함께 쓰는 방식이 같아요. - GNU Fortran 내장 프로시저 전체 목록은 Intrinsic Procedures에서 확인할 수 있어요.