

기본적으로는 Debug모드로 설정되어있는데, 실제로 게임을 배포하는 등의 작업을 하게 되면 Release 모드로 설정하여 작업하게 된다.
Release모드를 사용하면 자동으로 최적화 기능이 추가되는데, 이로 인해서 멀티쓰레드 기능이 꼬이는 버그가 주로 발생한다.
위와 같은 코드에서 그저 Release 모드로만 바꿨을 뿐인데 실행하면 while(!stop)문에서 무한 실행을 하고 있는 것을 확인할 수 있다. 
이에 강제로 최적화를 못하도록 하는 방법이 바로 volatile 변수로 만들어주는 것이다.
- volatile
: C/C++ 프로그래밍 언어에서 이 키워드는 최적화 등 컴파일러의 재량을 제한하는 역할을 한다. 개발자가 설정한 개념을 구현하기 위해 코딩된 프로그램을 온전히 컴파일되도록 한다. 주로 최적화와 관련하여 volatile가 선언된 변수는 최적화에서 제외된다.
하지만 C#에서 volatile은 다양하고 복잡한 여러가지 기능을 하기 때문에, C# 전문가들은 volatile의 사용을 지양한다.
메모리 베리어, 락, 아토믹 등을 사용하는 것을 권장한다.