2013-02-01 3 views
6

2 개의 스레드가 에 다른 메모리 위치와 다른 쓰기를하는 C++ 11 응용 프로그램이 있다고 가정합니다. 간단한 포인터는 기본 유형을 사용합니다. 이 두 가지 쓰기가 모두 결국 메모리에서 끝나거나 (둘 다 boost::barrier에 도달 한 후) 또는 CPU 코어가 해당 데이터를 포함하는 자체 캐시 라인을 보유하고 두 번째 코어가 수정을 플러시 할 위험이 있음을 확신 할 수 있습니까? RAM이 첫 번째 쓰기로 수행 된 수정을 덮어 쓰고 취소합니다?동일한 캐시 라인의 다른 위치에 동시 쓰기

캐시 일관성이 모든 상황과 C++ 11 메모리 모델을 준수하는 모든 설정에서이 문제를 해결하기를 바랍니다.하지만 확실하게 알고 싶습니다.

답변

7

예 캐시 일관성 메커니즘이이를 처리합니다. 이를 False sharing이라고하며 성능을 향상시키기 위해 데이터를 분리하면 더 이상 피해야합니다.

+3

캐시 일관성 프로토콜의 예 : [MESI] (http://en.wikipedia.org/wiki/MESI_protocol). –