5.5.6 スレッドを使った処理

関数getcontext() は、スレッド毎に別々のContext オブジェクトにアクセスします。別のスレッドコンテキストを持つということは、 複数のスレッドが互いに影響を及ぼさずに (getcontext.prec=10 のような) 変更を適用できるということです。

同様に、setcontext() 関数は自動的に引数のコンテキスト を現在のスレッドのコンテキストに設定します。

getcontext() を呼び出す前にsetcontext() が 呼び出されていなければ、現在のスレッドで使うための新たなコンテキスト を生成するためにgetcontext() が自動的に呼び出されます。

新たなコンテキストは、DefaultContext と呼ばれる雛形から コピーされます。アプリケーションを通じて全てのスレッドに同じ 値を使うようにデフォルトを設定したければ、DefaultContext オブジェクトを直接変更します。getcontext() を呼び出す スレッド間で競合条件が生じないようにするため、DefaultContext への変更はいかなるスレッドを開始するよりも前に 行わねば なりません。以下に例を示します:

# スレッドを立ち上げる前にアプリケーションにわたるデフォルトを設定
DefaultContext.prec = 12
DefaultContext.rounding = ROUND_DOWN
DefaultContext.traps = ExtendedContext.traps.copy()
DefaultContext.traps[InvalidOperation] = 1
setcontext(DefaultContext)

# その後でスレッドを開始
t1.start()
t2.start()
t3.start()
 . . .

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。