問題タブ [thread-specific-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.
multithreading - ポータブルスレッド固有ストレージメカニズムの命名スキームは、どのようにしてスレッド相対一意識別子を生成しますか?
boost / thread / tss.hppがインスタンスであるポータブルスレッド固有のストレージ参照/IDメカニズムには、それ自体に固有のキーを生成する方法が必要です。このキーはスレッドのスコープ内で一意であり、その後、参照するオブジェクトを取得するために使用されます。このメカニズムは、スレッドニュートラルな方法で記述されたコードで使用されます。
ブーストはこの概念の移植可能な例であるため、そのようなメカニズムはどのように具体的に機能しますか?
c++ - 関数から *安全に* TCHAR* を返すことは可能ですか?
すべてのイベント通知コードを文字列に変換する関数を作成しました。本当にシンプルなもの。
私はのようなconstsの束を持っています
そして私の機能
大きな問題ではない。一緒に投げるのに5分かかりました。
...しかし、考えられるすべての値を取得できるとは信じていないので、一致が見つからない場合に「予期しない通知コード (7410)」のようなものを返すデフォルトが必要です。
残念ながら、呼び出し元に文字列のメモリを強制的に削除させずに、有効なポインターを返す方法は考えられません...これは厄介なだけでなく、他の戻り値の単純さと矛盾します。
したがって、ユーザーがバッファと文字列の長さを渡すパラメータに戻り値を変更せずにこれを行う方法は考えられません。私の関数は次のようになります
私は本当にそれをしたくありません。もっと良い方法があるはずです。
ある?
私は 10 年間の休止期間を経て C++ に戻ってきたので、それが明らかな場合でも、何らかの理由で見落としていたことを軽視しないでください。
multithreading - スレッド固有のデータを正しく使用する方法
私はpthreadを使ってプログラミングしています。スレッドごとに異なる値を持つグローバル変数が必要です。また、スレッドは同じ関数を使用して、値を変更するなど、この変数を処理します。1 つのスレッドがその値を変更しても、他のスレッドの値は変更されません。そこで、スレッド固有のデータを使用しようとして、例を書きました。関数で pthread 操作をラップする必要があります。例: setspecific()、changedata、printdata()、create_key()、delete_key() など。
2 つのスレッドを作成します。1つのスレッドを2秒間スリープさせると。正解が出ます。
コメントすると /* sleep(2); */ 、不正解です。
スレッドをスリープさせずに正しい結果を得たい。一方のスレッドが他方のスレッドが pthread_setspecific() の呼び出しを終了するのを待つべきではありませんよね? 私は何をすべきか?ご検討いただきありがとうございます。struct_data をグローバル変数として定義するのは正しいでしょうか? 誰でも私を助けることができますか?
c++ - スレッド固有のデータとスレッドのローカル ストレージ
Kerrisk のThe Linux Programming Interface: A Linux and UNIX System Programming Handbook、スレッドに関する第 31 章を読みました。この章には、スレッド固有のデータ (セクション 31.3.4) とスレッド ローカル ストレージ (セクション 31.4) が含まれます。トピックは 663 ~ 669 ページで説明されています。
スレッド固有のデータ ( pthread_key_create
、pthread_setspecific
、pthread_getspecific
、およびその仲間) はより強力に見えますが、使用するのが少し面倒で、メモリ マネージャーをより頻繁に使用するようです。
スレッド ローカル ストレージ (__thread
静的およびグローバル宣言で) は、コンパイル時間に制限があるため、少し強力ではないように見えますが、使いやすく、実行時にメモリ マネージャーから離れているように見えます。
変数pthread_key_create
に遭遇したときに呼び出すコードが舞台裏にある可能性があるため、ランタイムメモリマネージャーについては間違っている可能性があります。__thread
Kerrisk は 2 つの戦略の比較/対比を提供しておらず、特定の状況でいつどちらを使用するかについても推奨していません。
質問にコンテキストを追加するには:サードパーティのライブラリを評価しています。ライブラリはグローバルを使用し、ロックを使用しません。マルチスレッド プログラムで使用したいと考えています。このプログラムは、スレッド化を使用してネットワーク遅延を最小限に抑えます。
ハンズダウンの勝者はいますか?または、どちらか一方を使用することを保証するさまざまなシナリオがありますか?