ATOMIC_AND — 원자적으로 비트 AND 정의하기

ATOMIC_AND — 원자적으로 비트 AND 정의하기

여러 이미지가 같은 변수의 비트를 조작할 때도 데이터 경쟁을 피해야 해요. 읽고 쓰는 사이에 다른 이미지가 끼어들면 비트 연산 결과가 틀어질 수 있으니까요. ATOMIC_ANDATOM의 값과 VALUE의 비트 AND 결과를 ATOM에 원자적으로 정의해 주는 내장 서브루틴이에요.

출처: ATOMIC_AND (The GNU Fortran Compiler)

본문

시그니처

CALL ATOMIC_AND (ATOM, VALUE [, STAT])

설명

ATOMIC_AND(ATOM, VALUE)ATOM의 값과 VALUE의 값 사이의 비트 AND 결과로 ATOM을 원자적으로 정의해요. STAT가 주어졌을 때 호출이 성공하면 STAT에 0이 저장돼요. 호출이 실패했는데 STAT가 주어졌다면 양수 값이 저장되는데, 특히 코인덱스된(coindexed) ATOM의 경우 원격 이미지가 멈췄다면 ISO_FORTRAN_ENVSTAT_STOPPED_IMAGE 값이, 원격 이미지가 실패했다면 STAT_FAILED_IMAGE 값이 저장돼요.

클래스

원자적 서브루틴(Atomic subroutine)이에요.

인자

  • ATOMATOMIC_INT_KIND kind를 가진 정수 타입의 스칼라 코레이나 코인덱스된 변수예요.
  • VALUEATOM과 같은 타입의 스칼라예요. 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에서 확인할 수 있어요.