問題タブ [thread-local-storage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
220 参照

c++ - ブースト スレッドで pthread_getspecific を呼び出すときの不正なアクセス

複数のホスト アプリケーションで実行され、boost::thread ライブラリ バージョン 1.53.0 を使用して独自のスレッドを維持するプラグインを開発しています。

Mac 上の特定のアプリケーションでプラグインを実行すると、 を呼び出すときに null アクセス エラーが発生しますboost::condition_variable::timed_wait()。呼び出しスタックの一番上にあるのはpthread_getspecific()、ブースト スレッド ライブラリ内から呼び出される への呼び出しです。

timed_wait()の呼び出しに置き換えると、同じ動作になります。内部で呼び出されるとboost::this_thread_sleep()例外がスローされます。pthread_getspecific()

このアプリケーションは、この種の動作を示す唯一のアプリケーションです。プラグインを他のホストで実行すると、期待どおりに動作します。

pthread の経験はあまりありませんが、ホスト アプリケーションによって設定されたいくつかのプロパティが原因で例外が発生するに違いないと思います。ここで何が起こっているのかについて、より良い考えを持っている人はいますか?

ありがとう!

0 投票する
2 に答える
4379 参照

c++ - C++11: GCC 4.8 静的 thread_local std::unique_ptr 未定義参照

マクロを介してアクセスされるすべてのスレッドに一意のポインターを格納する必要があります。シングルトンと静的な thread_local std::unique_ptr オブジェクトでこれを解決する必要があると思いました。コードの簡略版は次のとおりです。

main.cpp

yay.hpp

yay.cpp

これを gcc 4.8.1 でコンパイルすると:

私は得る:

clang からより多くの情報が得られることを期待していましたが、clang 3.4 では問題なく動作します。

プログラムを実行すると、期待していた結果が得られます。

ここで何が間違っているのかわかりませんが、静的な thread_local unique_ptr オブジェクトを持つことはできませんか? int や「ネイキッド」ポインターなどの単純な型で機能します。

編集:

これは、 http: //gcc.gnu.org/bugzilla/show_bug.cgi?id=55800に関連するバグである可能性があります。

編集2:

回避策 1: 1 つのファイルを clang でコンパイルする (yay.cpp)

回避策 2 (恐ろしく、移植性がありません): 最初に yay.cpp をアセンブリにコンパイルし、追加します。

アセンブリ ファイルへ、オブジェクト ファイルへのコンパイル、残りとのリンク

0 投票する
1 に答える
285 参照

c++ - ブースト スレッド固有のポインター get() メソッドにかかるおおよその時間

ブースト スレッド固有のポインターを使用して、その特定のスレッドのみのグローバル データを格納しています。以下は、誰かが GetInstance() を呼び出したときに返すシングルトンです。

私の質問は、通常のポインター アクセスと比較して、スレッド固有のポインター (m_tspConnectionManager.get();) を取得するのにかかるおおよその時間です。

以下のコードを使用しました (ここで .get() メソッドを 2 回呼び出します)。完全な関数を実行するのに約 3 秒かかりました。

さて、上記のコードを .get() メソッドを 1 回だけ呼び出すように変更したところ、約 1.9 秒かかりました。

したがって、.get() メソッドを呼び出さないだけで、パフォーマンスが 1.1 秒向上することがわかりました。どうやって利益を得るかを理解しようとしてきましたか? 注:このゲインは、GetInstance() 関数を何度も呼び出すことの全体的なゲインである可能性があります。ここでは、単一のコール ゲインを理解しようとしています。

0 投票する
0 に答える
415 参照

c++ - C++ スレッド ローカル ストレージ ベクトルのブースト

マルチスレッド用の tls ベクターを作成していますが、ベクター要素にアクセスする方法を知りたいです。

基本的に私はこれを作成しました:


これは構文の問題だと思いますが、作成した temp tls 文字列にベクトル要素を割り当てるにはどうすればよいでしょうか?


助言がありますか?ありがとう :)