volatile 과 메모리 베리어의 이해부족으로 인한 잘못된 정보가 인터넷에 꽤 널려있다. 특히 한글 문서에서 미묘한 오류를 포함하고 있는 문서가 많이 발견되는것 같다. OOE(Out of order execution) 는 컴파일러와 프로세서에 의해 일어날 수 있는데 어지간한 지식 없이는 메모리 베리어를 제대로 이해하기 힘들다. 오류의 발생 빈도가 낮아재현과 해결이 무척 힘든 부분이기 때문에, 개념부터 바닥의 디테일까지 확실하게 이해해야할 필요가 있다.

관련해서 f군과 수집한 몇가지 자료들을 추천해 본다.

* Eric Eilebrecht - Fun programming problem: a simple lock-free algorithm
* Jonathan Morrison - How Does KeMemoryBarrier Work
* Bartosz Milewski - Who ordered memory fences on an x86?
* David Howells - Linux Kernel Memory barriers

자신은 제대로 이해하고 있고, 응용에도 강하다고 생각한다면 아래의 연습문제를 풀어보자.

1. 인라인 어셈블리는 왜 컴파일러 메모리 베리어로 기능하는가?
2. 컴파일러 메모리 베리어와 프로세서 메모리 베리어는 왜 구분해서 사용되어야 하는가?
3. 크리티컬 섹션이나 뮤텍스 등 동기화 객체로 코드를 동기화하면 메모리 베리어 효과가 발생한다. 그 이유는 무엇인가?

덧. 나라면 여차하면 삑사리 나는짓 하지 않고 그냥 동기화 객체 쓴다.
2009/09/09 19:16 2009/09/09 19:16

트랙백 주소 :: http://testors.net/tt/trackback/1212