1

C++0x は、thread_localVS10 にまだ実装されていない新しいストレージ指定子を追加します。

ただし、並列プログラミング ライブラリは、スレッド プライベート サブ計算への参照を返す関数を持つConcurrency::combinableクラスを定義します。local()

タイプの変数をthread_local持つことで(簡単に)カバーできないセマンティクスはありますか?staticcombinable<T>

thread_localそうでない場合、ライブラリに実装できるのになぜコア言語に追加されたのですか?

4

1 に答える 1

3

GObjectがCで行うようなライブラリによって実装できるのに、なぜC++がクラスオブジェクトを追加したのですか? C++ はコンパイル時にクラスオブジェクトを認識する必要があるため、これはより効率的です。したがって、C++ クラスの初期化/非初期化は例外セーフ ( RAII ) です。

一部の機能はより重要であり、さらに実装する必要があります。thread_localstorage class specifierであるため、コンパイル時に知ることができ、コンパイラはより多くの最適化を行うことができます。

またhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htmで次のように述べています。

スレッド変数の動的初期化

現在、スレッド ローカル ストレージのすべての実装は、動的初期化 (およびおそらく非自明なデストラクタ) をサポートしていません。モントレブラン会議では、関数ローカル変数とスレッドローカル変数の動的な初期化をサポートすることについて、穏やかなコンセンサスが得られました。このような変数の初期化はすでに保護され、同期されているため、新しいテクノロジーは必要ありません。一方、名前空間スコープ変数の動的初期化の実装ははるかに難しく追加のリンカーとオペレーティング システムのサポートが必要になる場合があります。

なぜthread_local新しい言語キーワードとして導入されたのですか? その理由はThread Variable Dynamic Initializationにあるようです。

于 2010-08-23T14:43:43.013 に答える