次の方法で共有


Context::Unblock メソッド

コンテキストのブロックを解除し、実行できるようにします。

virtual void Unblock() =0;

解説

Unblock メソッドの呼び出しを、対応する Block メソッドの呼び出しの前に行うのは、まったく問題ありません。Block メソッドと Unblock メソッドの呼び出しが正しくペアになっている限り、順序の自然な競合はランタイムによって適切に処理されます。Block を呼び出す前に Unblock を呼び出した場合、単純に Block の呼び出しの効果が無効になります。

このメソッドからは、いくつかの例外がスローされる可能性があります。コンテキストからそのコンテキスト自体に対して Unblock メソッドの呼び出しを試みると、context_self_unblock の例外がスローされます。Block 呼び出しと Unblock が正しく (たとえば、現在実行中のコンテキストの Unblock への 2 回の呼び出しが行われます)組み合わせて行われていない場合、 context_unblock_unbalanced 例外がスローされます。

別のスレッドが Unblock メソッドを呼び出すことができるようにコードがそのコンテキストをパブリッシュする時点と、Block メソッドの呼び出しが実際に行われる時点の間に、重要な処理が実行されることに注意してください。この期間中は、独自の原因のためにブロックまたはブロック解除できるメソッドをダイヤルするとなり (たとえば、ロックを取得します)。Block メソッドと Unblock メソッドの呼び出しでは、ブロックとブロック解除の理由は追跡されません。BlockUnblock のペアの所有権を持つオブジェクトは 1 つである必要があります。

必要条件

ヘッダー: concrt.h

名前空間: の同時実行

参照

関連項目

Context クラス

Context::Block メソッド

概念

タスク スケジューラ (同時実行ランタイム)