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 つの戦略の比較/対比を提供しておらず、特定の状況でいつどちらを使用するかについても推奨していません。
質問にコンテキストを追加するには:サードパーティのライブラリを評価しています。ライブラリはグローバルを使用し、ロックを使用しません。マルチスレッド プログラムで使用したいと考えています。このプログラムは、スレッド化を使用してネットワーク遅延を最小限に抑えます。
ハンズダウンの勝者はいますか?または、どちらか一方を使用することを保証するさまざまなシナリオがありますか?