volatile 썸네일형 리스트형 volatile Qualifier and Memory Barrier 멀티스레드 상황에서, 메모리 쓰기 순서를 유지하여 오동작을 막아준다고 알려져왔던 이중 검사 동기화 패턴(double checked locking)은, 안타깝지만 모든 상황에서 제대로 동작하는 것이 아니다. CPU 런타임 시점에 이루어지는 실행 순서 재배열 문제 때문인데, 한층 더 불행한 소식은 이 문제를 방지하기 위한 volatile 한정자 선언조차 여기서 큰 도움이 되지 않는다는 점이다. C 표준에서는, volatile로 선언된 변수일 경우, 그 실행 순서가 도달하기 전까지 지정했던 동작의 완료를 보장하도록 한다. 즉, memory-mapped IO와 같은 기법에서 유용하게 쓰이며, 실제로도 그런 목적으로 고안된 것이다. 그러나, C++에서는 약간의 모호함이 있다. 즉, 실제로 volatile 선언은 .. 더보기 이전 1 다음