2012-01-19 4 views
10

나는 실제로 두 가지 방법으로 주장을 들었다. 나는 그렇지 않다고 생각하지만 주제를 해결하기를 원했다.C++에서 포인터 할당 원자입니까?

+2

도 참조하십시오 http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth

+1

C++은 '원자 '을 필요로하지 않았습니다. :) –

답변

14

C++ 03은 스레드의 존재에 대해 알지 못하기 때문에 원 자성 개념은 C++ 03에 대해서는별로 의미가 없으므로 아무 말도하지 않습니다.

C++ 11은 스레드에 대해 알고 있지만 포인터 지정의 원 자성에 대해서는 아무 것도 말하지 않습니다. 그러나 C++ 11에는 원자가 될 수있는 std::atomic<T*>이 포함되어 있습니다.

원시 포인터에 쓰는 것이 플랫폼에서 아토믹 (atomic)하다고해도 컴파일러는 자유롭게 그 동작을 자유롭게 할 수 있으므로 실제로는 아무 것도 사지 않습니다.

당신이 스레드간에 공유되는 포인터에 기록해야하는 경우

중 하나 std::atomic<T*> (또는 아직 공식하지 boost::atomic<T*>는, 원자 내장 함수 또는 창 연동 *를 gccs)를 사용 또는 전부가 뮤텍스에 그 포인터에 액세스 랩.

+0

여기에서 boost.atomic을 얻을 수 있습니다. http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html –

2

C++ 표준은 특정 스레딩 동작을 정의하지 않습니다. 컴파일러와 플랫폼에 따라 포인터 할당이 아토믹하지 않을 수도 있습니다.

+8

C++ 11 *은 스레딩 동작 및 관련 메모리 모델을 정의합니다. –

+1

@Frizlab and J.N. 너는 모두 정확하다. 포르쉐가 말하는 스포츠카는 정확하지만 부정확합니다. 모든 모델이 스포츠카가 아닙니다. :) – mloskot