C 言語でボラタイル キーワード の使い方
C言語では、volatileキーワードはコンパイラに、変数の値が予期せず変更される可能性があることを伝えるもので、コンパイラによるその変数の最適化を抑制します。特にマルチスレッドや組込みシステムでは、volatileキーワードは、ハードウェアレジスタや共有メモリのアクセスなどに使用されます。
volatile キーワードは変数の宣言前でも、型修飾子として使用することができます。以下は volatile キーワードを使用するいくつかの例です。
- 不安定な
volatile int flag;
- 気まぐれな
int volatile flag;
- 不安定な
volatile int *ptr;
- 変化しやすい
volatile int getValue();
なお、volatile キーワードはコンパイラによる変数の最適化が行われないことを保証しますが、スレッドセーフを保証するものではなく、スレッドセーフを保証する場合は、ミューテックスなどの別の同期メカニズムを使用する必要があります。
なお、volatile修飾子は、グローバル変数にも使用できますが、マルチスレッド環境では、スレッドセーフティを担保するため、アトミック操作またはミューテックスを使用することを推奨します。