의 OpenMP 표준 (< = 4.0)에 대한 atomic
말한다 : expression-stmt
는 다음 형식 중 하나를 표현 문은참조 유형에 대한 OpenMP atomic?
#pragma omp atomic [read | write | update | capture ] new-line
expression-stmt
:
...
하는 경우 절이 업데이트되었거나 존재하지 않음 :
x++;
위 식에서 5,...
(적용 가능한 경우)과
x
v
스칼라 타입 모두 L 값 식은이다. 내가 올바르게 해석 할 때
...
그래서, 다음의 짧은 코드는 불법입니다 :
int main()
{
int myCounter = 0;
int& reference = myCounter;
#pragma omp parallel for
for (int i = 0; i < 100; ++i)
{
#pragma omp atomic
reference++; // Increment through reference.
}
return 0;
}
이유 : 따르면 this post에, 참조 (여기 int& reference
)되어 있지 스칼라 유형. 그러나이 표준은 atomic
을 사용하기 위해서는 하나 여야한다고 명시 적으로 명시하고 있습니다.
코드는 아무런 경고없이 (-Wall -Wextra
) g ++로 컴파일됩니다.
제 질문은 : 표준 또는 C++의 "참조 유형"개념을 잘못 이해 했습니까? 그렇지 않으면 atomic
의 사용이 심각하게 제한되어 있기 때문에 (기본적으로 참조 또는 참조 해제 된 포인터가 필요하기 때문에 기본적으로 힙에있는 데이터는 atomic
의 대상이 될 수 없기 때문에) 대부분의 컴파일러에서이 코드를 컴파일합니까?
많은 설명 주셔서 감사합니다 :) – Gugi