나는 실제로 두 가지 방법으로 주장을 들었다. 나는 그렇지 않다고 생각하지만 주제를 해결하기를 원했다.C++에서 포인터 할당 원자입니까?
답변
C++ 03은 스레드의 존재에 대해 알지 못하기 때문에 원 자성 개념은 C++ 03에 대해서는별로 의미가 없으므로 아무 말도하지 않습니다.
C++ 11은 스레드에 대해 알고 있지만 포인터 지정의 원 자성에 대해서는 아무 것도 말하지 않습니다. 그러나 C++ 11에는 원자가 될 수있는 std::atomic<T*>
이 포함되어 있습니다.
원시 포인터에 쓰는 것이 플랫폼에서 아토믹 (atomic)하다고해도 컴파일러는 자유롭게 그 동작을 자유롭게 할 수 있으므로 실제로는 아무 것도 사지 않습니다.
당신이 스레드간에 공유되는 포인터에 기록해야하는 경우
중 하나std::atomic<T*>
(또는 아직 공식하지
boost::atomic<T*>
는, 원자 내장 함수 또는 창 연동 *를 gccs)를 사용 또는 전부가 뮤텍스에 그 포인터에 액세스 랩.
여기에서 boost.atomic을 얻을 수 있습니다. http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html –
C++ 표준은 특정 스레딩 동작을 정의하지 않습니다. 컴파일러와 플랫폼에 따라 포인터 할당이 아토믹하지 않을 수도 있습니다.
C++ 11 *은 스레딩 동작 및 관련 메모리 모델을 정의합니다. –
@Frizlab and J.N. 너는 모두 정확하다. 포르쉐가 말하는 스포츠카는 정확하지만 부정확합니다. 모든 모델이 스포츠카가 아닙니다. :) – mloskot
- 1. mq_send가 원자입니까?
- 2. SetEvent는 원자입니까?
- 3. fwrite 원자입니까?
- 4. C에서 할당/비교를 위해 NULL을 구조체 포인터 유형에 캐스트해야합니까?
- 5. 은 대입 연산자 '='원자입니까?
- 6. 포인터 메모리 할당 문제
- 7. 포인터 할당 문제
- 8. const char 포인터 할당
- 9. 싱글 클래스 포인터 할당
- 10. 반복자에 포인터 할당
- 11. auto_ptr에 원시 포인터 할당
- 12. 배열 포인터, 배열 할당
- 13. 할당 반환 포인터 배열
- 14. 개체 포인터 할당
- 15. 배열에 포인터 배열 할당
- 16. 포인터 참조 수준의 할당
- 17. C에서 별도의 함수로 포인터 초기화
- 18. C에서 포인터 배열
- 19. C에서 포인터 표기법
- 20. C에서 함수 포인터 배열
- 21. Objective-C에서 포인터 사용?
- 22. C에서 Dereferencing 문자열 포인터
- 23. 포인터 산술 C에서
- 24. C에서 포인터 조작
- 25. C에서 char 포인터 초기화
- 26. C에서 구조 포인터 초기화
- 27. C에서 학습 포인터
- 28. INT 포인터 C에서
- 29. C에서 로컬 포인터 반환
- 30. C에서 일반적인 함수 포인터
도 참조하십시오 http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth
C++은 '원자'을 필요로하지 않았습니다. :) –