各プロセッサのメモリ階層に格納されているデータを、システム上のすべてのプロセッサから参照できるようにします。 メモリ フェンス全体がすべてのプロセッサで実行された後で、メソッドから制御が返されます。
virtual void EnsureAllTasksVisible(
IExecutionContext *pContext
) =0;
パラメーター
- pContext
この仮想プロセッサ ルートで現在ディスパッチされているコンテキスト。
解説
このメソッドは、仮想プロセッサ ルートの非アクティブ化とスケジューラへの新しい作業の追加を同期する場合に便利です。 パフォーマンス上の理由により、メモリ バリアを実行せずにスケジューラに作業項目を追加する場合があります。その場合、1 つのプロセッサで実行されているスレッドによって追加された作業項目は、他のすべてのプロセッサから直ちに参照できるようにはなりません。 このメソッドを Deactivate メソッドと共に使用することにより、スケジューラのコレクションに作業項目が存在する間はスケジューラが仮想プロセッサ ルートをすべて非アクティブ化しないようにすることができます。
EnsureAllTasksVisibleThe メソッドの呼び出しは、仮想プロセッサ ルートが最後にアクティブ化された実行コンテキストの Dispatch メソッド内から行う必要があります。 つまり、EnsureAllTasksVisible メソッドを呼び出すスレッド プロキシは、仮想プロセッサ ルートで現在実行されている必要があります。 実行中ではない仮想プロセッサ ルートでメソッドを呼び出すと、未定義の動作を引き起こす可能性があります。
引数 pContext が NULL 値を持つ場合、invalid_argument がスローされます。
仮想プロセッサ ルートがこれまで一度もアクティブ化されていない場合、または引数 pContext がこの仮想プロセッサ ルートで最後にディスパッチされた実行コンテキストを表していない場合、invalid_operation がスローされます。
必要条件
ヘッダー: concrtrm.h
名前空間: Concurrency