質問: コンテキスト、同期コンテキストとはなんでしょうか? コンテキストを調べると、文脈、環境という意味で、スレッドの抽象的な表現。や様々な情報を保持したもの。 同期コンテキストを調べると、処理をUIスレッドに返すための役割をもつもの。 などと書いてありました。 コンテキストがスレッドの抽象的な表現なのに同期コンテキストが処理をUIスレッドに返す役割のものと書いてあったりして結局なんなのかがいまいちわかりません。 コンテキストとはなんでしょうか? またその上で同期コンテキストとはなんでしょうか? また同期コンテキストと、Dispatcherの関連も教えていただきたいです。
回答: こんにちは。 コンテキストと言う表現はよく見ますし、私も時々使います。 正確な定義は特にないようですが、私は「スタック」基準で把握しています。 サブルーチン・コールした時、戻り番地はスタックに記録されますが、この使い方のスタックです。 同じスタック上で実行されているルーチンは同じコンテキストにあり、スタックが異なればコンテキストも異なります。ほとんどのケースでこの理解で事足りると思います。(例えば、カーネル・モード専用のスタックを持たないCPUは別ですが、そのようなCPUはもう存在しないかも知れません。) そして、スタックは基本的にはスレッド毎に存在しますので、概ねスレッド≒コンテキストと考えてもあまり外れることはないと思います。 (スレッドでもないのにスタックが存在するケースもあります。レアなので説明は省略しますが、その時も含めて表現できるのでコンテキトと言う用語は便利なのです。) 同期コンテキストですが、異なるスレッド上で実行されているけど、同期が取れている部分の意味で使われることが多いようです。同期が取れている部分とは、その同期コンテキストをリクエストしたスレッドと(Mutexで排他制御する等して)排他的に実行されるコードという意味です。