컴파일러 최적화

Eunho Bae·2022년 2월 23일
0

Release 모드로 프로그램을 실행하게 되면 컴파일러가 지멋대로 코드최적화를 할 수 있다. 위 경우엔 _stop이 true가 되었음에도 task가 끝나지 않고 무한히 대기하는 모습을 보여주는데
while(_stop == false) 부분이

if(_stop == false)
{
	while(true) {} 
}

로 바뀐게 그 이유라고 한다.

이처럼 코드가 컴파일러가 생각하는 최적화된 방법으로 재작성되어 우리가 생각지도 못한 결과물이 나올 수 있는데, 그 때 그걸 막기위해 사용하는 것이 바로 volatile 키워드이다.

하지만 C#전문가들은 volatile은 추천하지 않는다고 하니 대신 후에 나올 lock, 메모리베리어, 아토믹 같은 옵션을 쓰도록 하자

profile
개인 공부 정리

0개의 댓글

관련 채용 정보