작성
·
338
0
강의 내용을 복습하다가 막힌 부분을 질문 드립니다.
해당 내용에서 volatile bool ready를 선언하여 진행하였는데,
이것저것 테스트를 해보려고 시도하다가,
Release모드로 변경했을때, volatile이 있을때는 여전히 if문에서 바로 빠져나오는 것을 확인할 수 있었습니다.
그런데 volatile을 빼주고 Release 모드로 진행했을때는 이상하게 프로그램이 끝나지 않는 문제가 발생했습니다.
volatile을 빼줬고 Release로 했다는건, 최적화를 지멋대로 컴파일러가 진행했을것 같은데, 오히려 이것이 r1과 r2가 영원히 0이 되지 않는 문제로 이어진다는게 이해가 안갔습니다.
코드 재배치와 가시성 문제를 자체적으로 해결했다는것으로 예상되는데, 이것을 컴파일러 최적화(Release모드)가 한번에 해결했다고 생각하면 되는건가요?
volatile이 있는 상태에서 Release모드로 돌렸을때는, 최적화를 막고 있는 그대로 실행하기 바라는 것이고, 그로 인해 강의 내용에 나오는 원인이었던 코드 재배치와 가시성 문제로 반복문에서 빠져나오게 되는것이라 생각했는데 제가 제대로 이해한게 맞을까요?
답변 1
0
C++의 volatile은 C#과 volatile과 다르게 가시성과 무관하고
단순히 컴파일러 최적화를 막는 역할만 합니다.
컴파일러 최적화에 의해서 의도한 코드와 다른 코드가 만들어질 수 있는데
이를테면 변수에 a = 1; a = 2; a =3;
을 각각 넣으면 마지막 상태인 a = 3만 넣는다거나,
하는 다양한 방법의 최적화를 알아서 해줍니다.