8

pthread_key_t と pthread_key_create がどのように機能するかを理解するのに苦労しています。私の理解では、各スレッドには TLS (スレッド ローカル ストレージ) があり、スレッド ローカル ストレージへのアクセスにはキーが使用されます。私が得られないのは、キーが作成されたときです。すべてのスレッドがそれを使用しますか? スレッド 0 がキー 0 を作成するとします。スレッド 1 はキー 0 を使用できますか? スレッド 1 がキー 0 を使用した場合、スレッド 1 は独自の TLS またはスレッド 0 の TLS にアクセスしますか?

使用されているすべてのキーを追跡するグローバル配列または何かがありますか?

4

1 に答える 1

8

pthread_keysはまさにあなたが言ったことであり、共通のキーによって参照されるスレッドローカルストレージです。したがって、複数のスレッドが同じキーを使用しますが、(スレッドごとに)異なるストレージスペースを取得します。

簡単な例(これも考案されました)、非同期サーバー(IMAPなど)を構築しているとします。配列内のクライアント接続を追跡できます。各接続には、現在のタスク/リクエストのキーがあります。したがって、リクエストが着信すると、新しいスレッドがスピンアップされ、スレッドはClient_Connection->WhatAmIDoingキーに「リクエスト」構造へのポインタを格納します。スレッドが実行する関数は、pthread_getspecific()関数を呼び出すだけで、想定されていることへのポインターを取得できるため、スレッドはそのポインターを渡す必要がなくなります。

于 2012-01-25T18:46:35.320 に答える