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

cilk_sync

インテル® Cilk™ Plus は古い機能 (非推奨) です。代わりに、OpenMP* またはインテル® TBB を使用してください。詳細は、「インテル® Cilk™ Plus の代わりに OpenMP* またはインテル® TBB を使用するためのアプリケーションの移行」を参照してください。

このキーワードの記述方法は _Cilk_sync です。ヘッダーファイル <cilk/cilk.h> には簡易版 (cilk_sync) が定義されています。ここでは、cilk.h で定義されている簡易版を使用します。

cilk_sync 文は、タスクブロック (ほとんどの場合、関数) に適用され、この記述を含む関数は、スポーンした子タスクが完了するまで現在の位置で待機することを指示します。すべての子タスクが完了すると、現在の関数は処理を続行できます。

ただし、例外として、cilk_sync 文が cilk_for ループの本体にある場合、cilk_synccilk_for ループの内側でスポーンされた子タスクにのみ適用され、cilk_for 本体の外側で同じ関数からスポーンされた子タスクには適用されません。

構文は、次のとおりです。

cilk_sync;

cilk_sync では、現在の関数がスポーンした子タスクのみを同期します。ほかの関数からスポーンされた子タスクには影響しません。

すべての関数や cilk_spawn を含む try ブロックの終端には暗黙の cilk_sync が隠されています。次の理由により sync が必要です。

暗黙の cilk_sync はデストラクターが呼び出された後に 起こります。