다음을 통해 공유


2.6.4 atomic 구문

atomic 지시문 보장 여러 개의 가능성에 노출 하기 보다는 특정 메모리 위치는 원자적으로 업데이트 됩니다 동시 스레드 작성 합니다. 구문에는 atomic 지시문은 다음과 같습니다:

#pragma omp atomic new-line 
   expression-stmt

식 문은 다음 형식 중 하나가 있어야 합니다.

x binop= expr 인수

x++

++x

x--

--x

앞의 식을 합니다.

  • x lvalue 스칼라 형식의 식입니다.

  • expr 식의 스칼라 형식입니다 및 의해 지정 된 개체를 참조 하지 않습니다 x.

  • binop오버 로드 된 연산자가 아니며 중 하나입니다 +, *,-, /, &, ^, |, <<, 또는 >>.

그 여부는 구현 모두 대체 구현이 정의 된 있지만 atomic 지시문과 함께 중요 한 같은 고유 지시문 이름atomic 인가 보다 잘 최적화 지시문. 하드웨어 지침 자주 사용할 수 있는 오버 헤드가 최소로 원자 단위 업데이트를 수행할 수 있습니다.

로드 및 저장으로 지정 된 개체의 x 는 원자성이 보장 됩니다. 평가 하는 expr 원자 수 없습니다. 경합 상태를 방지 하려면 모든 업데이트의 위치를 동시에 보호 해야는 atomic 지시문을 경쟁 조건에 사용할 수 있는 것으로 알려진 것은 제외 합니다.

제한에는 atomic 지시어는 다음과 같습니다.

  • 호환 되는 형식에 저장소 위치 x 프로그램 전반에 걸쳐 모든 원자 참조 해야 합니다.

예를 들면 다음과 같습니다.

extern float a[], *p = a, b;
/* Protect against races among multiple updates. */
#pragma omp atomic
a[index[i]] += b;
/* Protect against races with updates through a. */
#pragma omp atomic
p[i] -= 1.0f;

extern union {int n; float x;} u;
/* ERROR - References through incompatible types. */
#pragma omp atomic
u.n++;
#pragma omp atomic
u.x -= 1.0f;