14

Kerrisk のThe Linux Programming Interface: A Linux and UNIX System Programming Handbook、スレッドに関する第 31 章を読みました。この章には、スレッド固有のデータ (セクション 31.3.4) とスレッド ローカル ストレージ (セクション 31.4) が含まれます。トピックは 663 ~ 669 ページで説明されています。

スレッド固有のデータ ( pthread_key_createpthread_setspecificpthread_getspecific、およびその仲間) はより強力に見えますが、使用するのが少し面倒で、メモリ マネージャーをより頻繁に使用するようです。

スレッド ローカル ストレージ (__thread静的およびグローバル宣言で) は、コンパイル時間に制限があるため、少し強力ではないように見えますが、使いやすく、実行時にメモリ マネージャーから離れているように見えます。

変数pthread_key_createに遭遇したときに呼び出すコードが舞台裏にある可能性があるため、ランタイムメモリマネージャーについては間違っている可能性があります。__thread

Kerrisk は 2 つの戦略の比較/対比を提供しておらず、特定の状況でいつどちらを使用するかについても推奨していません。

質問にコンテキストを追加するには:サードパーティのライブラリを評価しています。ライブラリはグローバルを使用し、ロックを使用しませ。マルチスレッド プログラムで使用したいと考えています。このプログラムは、スレッド化を使用してネットワーク遅延を最小限に抑えます。

ハンズダウンの勝者はいますか?または、どちらか一方を使用することを保証するさまざまなシナリオがありますか?

4

2 に答える 2

1

pthread インターフェースは POSIX 標準であるため、移植性が高くなります。Linux システム以外でコードを使用する場合は、これらを使用してください。一方、厳密に gcc/linux を使用している場合は、__thread メカニズムの方が確かに使いやすいです。これは gcc 固有の拡張機能であり、すべてのプラットフォームでサポートされているわけではないことに注意してください。

于 2014-01-09T14:10:53.993 に答える