インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

マルチスレッド・コードのチェック

ポインターチェッカーは、macOS* システムではサポートされていません。

一般に、ポインターの読み取りまたは書き込みは、別のスレッドが割り込みできないアトミックな操作であると仮定されます (ポインターチェッカーを使用してマルチスレッド・モジュールのポインターをチェックする場合は除きます)。

メモリーからポインターの読み取りまたは書き込みを行う場合、そのポインターに関連付けられている範囲情報の読み取り/書き込みも行う必要があります。範囲情報の読み取り/書き込みには複数の命令が必要です。ロックを使用しない場合、スレッドがポインターと範囲の書き込みを行っているときに、別のスレッドがこの情報をスワップアウトすることがあります。その後、スレッドが同じポインターへ書き込むと、(あるスレッドのポインターと別のスレッドの範囲情報が書き込まれることで) ポインターと範囲情報が同期しなくなります。

マルチスレッド・コードのポインターと範囲情報を同期するには、複数のスレッドで共有しているメモリー領域のポインターの読み取り/書き込みを行うときに、ミューテックスやクリティカル・セクションのようなロックを使用します。通常、共有メモリーへのアクセスはこの方法で保護されます。

アプリケーションがロックなしで共有ポインターの読み取り/書き込みを行うアトミックなポインター読み取りまたはポインター書き込みに依存している場合、これらのアクセスを保護しないと範囲エラーが発生します。