コンパイラの最適化機能は、マルチスレッドプログラミングとかだと、不具合を起こす可能性があります。
mValue = 1;
while(mValue){
...
}
例えば、コンパイラは、しばしば上記のようなコードを、最適化によって以下のようなコードに変えます。
while(1){
...
}
whileの途中で、別スレッドからmValueの値を変化することを期待していた場合、このコードはうまく動きません。
よって、そんなときは、
volatile int mValue;
と宣言しておくとうまくゆきます。