私はscalaで計算ライブラリを作成しています。同様の機能私は、プロシージャの束とO(1)時間データのためのいくつかの静的に割り当てられたメモリを含むネイティブスカラーシングルトンオブジェクトにグループ化します。スレッドローカルオブジェクトをscalaに作成
このアプローチは、シングルスレッドでの使用に適しています。しかし、異なるスレッドから同時にライブラリ関数を呼び出すと、一時的なデータが上書きされ、呼び出し元に誤った回答が返される可能性があります。
私はこのライブラリをコピーして、静的に割り当てられたすべてのメモリを関数のローカル空間内に移動することでスレッドセーフ版を作成することができます。しかし、私はスレッドローカル変数を定義することによってそれを避けることを好む。
スカラでも可能ですか?
また、基本的には 'InheritableThreadLocal'のラッパーであるスカラの' DynamicVariable'があります。しかし、継承不可能なスレッドローカルのオプションは提供しません。 –
@RégisJean-Gilles OPの質問に厳密には関係ないかもしれませんが、「InheritableThreadLocal」と言いました。プーリングのためにExecutorsのフレームワークとうまく組み合わせられていないようです。このような変数には、廃止予定の 'new Thread()。start()'に保存されているものの他に、ユースケースがありますか? – idonnie
'DynamicVariable'はダイナミックスコープパターン*を実装するのに便利です。私の他の答えは例を参照してください:http://stackoverflow.com/a/13252952/1632462。ただし、マルチスレッドのコンテキストでは使用してはいけません。マルチコンテキストでは動作しません。 –