「スレッド化」プログラミングとメモリ可視性
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/11 01:18 UTC 版)
「メモリバリア」の記事における「「スレッド化」プログラミングとメモリ可視性」の解説
スレッド化されたプログラムは一般に、Javaなどの高級言語が提供する同期プリミティブやPOSIXスレッドやWin32などのAPIが提供する同期プリミティブを使用する。ミューテックスやセマフォなどのプリミティブは、複数スレッドが資源にアクセスするための同期機能を提供する。これらのプリミティブは必要なメモリ可視性(visibility)を提供するためにメモリバリア機能も実装していることが多い。そのような環境ではメモリバリアをプログラマが明示的に使用する必要はない。 各APIやプログラミング環境は、原則として自身の高レベルメモリモデルを持っていて、メモリ可視性を定義している。そのような環境ではメモリバリアを必要とすることはないが、メモリ可視性がどうなっているかを可能な限り理解しておくことは重要である。ただし、そのような話が必ずしも文書化されたり明確化されているわけではない。 プログラミング言語の意味論が機械語の命令コードとは異なったレベルで抽象化されて定義されているように、プログラミング環境のメモリモデルはハードウェアのメモリモデルとは抽象化のレベルが異なっている。これらを区別して理解し、低レベルなメモリバリア命令と特定のプログラミング環境のメモリ可視性の意味が異なることを理解することが重要である。例えば、あるプラットフォームの Pthreads の実装では、要求されているよりも強いメモリバリアを使用しているかもしれない。実装されたメモリ可視性を前提としてプログラムを作成すると、仕様上のメモリ可視性を前提としたプログラムよりも移植性が低くなる可能性がある。
※この「「スレッド化」プログラミングとメモリ可視性」の解説は、「メモリバリア」の解説の一部です。
「「スレッド化」プログラミングとメモリ可視性」を含む「メモリバリア」の記事については、「メモリバリア」の概要を参照ください。
- 「スレッド化」プログラミングとメモリ可視性のページへのリンク