キーワードは何volatile
をするのですか? C++ ではどのような問題を解決しますか?
私の場合、意識的にそれが必要だと思ったことはありません。
ベストアンサー1
volatile
たとえば、完全に別のプロセス/デバイス/その他が書き込む可能性のあるメモリ内の場所から読み取る場合に必要です。
私は以前、C 言語でマルチプロセッサ システムのデュアル ポート RAM を扱ったことがあります。ハードウェアで管理される 16 ビットの値をセマフォとして使用し、他の処理が完了したかどうかを確認していました。基本的には、次のようにしました。
void waitForSemaphore()
{
volatile uint16_t* semPtr = WELL_KNOWN_SEM_ADDR;/*well known address to my semaphore*/
while ((*semPtr) != IS_OK_FOR_ME_TO_PROCEED);
}
がなければvolatile
、オプティマイザはループを役に立たないものと見なします (この人は値を設定しません! 頭がおかしいです、そのコードを削除してください!)。そして私のコードはセマフォを取得せずに続行され、後で問題が発生します。