1. ホーム
  2. c++

[解決済み】揮発性のあるものはなぜ存在するのか?

2022-04-01 10:27:01

質問

とは何ですか? volatile キーワードは何ですか?C++ではどのような問題を解決するのでしょうか?

私の場合、意図して必要としたことはありません。

解決方法は?

volatile は、例えば、全く別のプロセス/デバイス/何々が書き込む可能性のあるメモリ上のスポットから読み取る場合に必要です。

以前、マルチプロセッサ・システムでデュアル・ポート・ラムをストレートCで扱ったことがありますが、相手の処理が終わったことを知るためのセマフォとして、ハードウェア管理された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 そのため、オプティマイザはこのループを無駄とみなし(こいつは値を設定しない!頭がおかしい、そのコードを削除しろ!)、私のコードはセマフォを取得しないまま進んでしまい、後で問題を引き起こすことになります。