インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
さまざまな同期メカニズムをハードウェアやオペレーティング・システム上において実装することができます。
インテル® Cilk™ Plus は、次のロックメカニズムを認識できます。
インテル® スレッディング・ビルディング・ブロック・ライブラリー の tbb::mutex を使用して、共有メモリーやその他の共有リソースに安全にアクセスし、更新できるクリティカルなコード領域を作成できます。 インテル® Parallel Studio XE のツールは、ロックを認識して、tbb::mutex によって保護されたメモリーアクセスの競合は報告しません、 qsort-mutex はtbb::mutex の使用例を示したものです。
Windows*: Windows* の CRITICAL_SECTION オブジェクトは、tbb::mutex オブジェクトとほぼ同じ機能を提供しています。 インテル® Parallel Studio XE のツールは、EnterCriticalSection()、TryEnterCriticalSection()、または LeaveCriticalSection() で保護されたアクセスの競合は報告しません。
Linux*/OS X*: Posix* Pthread の mutex (pthead_mutex_t) は、tbb::mutex オブジェクトとほぼ同じ機能を提供しています。 インテル® Parallel Studio XE のツールは、pthread_mutex_lock()、pthread_mutex_trylock()、または pthread_mutex_unlock() によって保護されたアクセスの競合は報告しません。
インテル® Parallel Studio XE のツールは、コンパイラーの組込み関数を通して利用可能な C/C++ のアトミックなハードウェア命令を認識します。
ロックに関する次の用語と説明を理解しておくと良いでしょう。
次の用語は同じ意味で使用されます: ロック (または "mutex") の "取得"、"突入"、"ロックする"。
ロックを取得したストランド (またはスレッド) は、ロックを "所有" しているといいます。
ロックを所有しているストランドのみがロックを "解放"、"終了"、"アンロック" することができます。
一度に同じロックを所有できるストランドは 1 つだけです。
tbb::mutex は OS の mutex 操作を使用して実装されています。
ロック競合は、並列プログラムでパフォーマンス問題を引き起こします。また、ロックはデータ競合を解決しますが、ロックを使用したプログラムは非決定的になりがちです。可能な限り、ロックは使用しないようにすることを推奨します。
これらの問題 (およびその他の問題) は、次のセクションで詳しく説明しています。