2011-07-02 10 views
9

iOSは__threadをサポートしていないことを理解しています。明らかに、pthread_setspecificを使ってこれを行う方法があります。しかし、すでにこの機能を実装したテンプレートクラスはありますか?スレッドローカルストレージとiOS

私は車輪を再発明しました。特に書くのは単なるコードではありません。

リンクは非常に高く評価されます。

乾杯

+1

['boost :: thread_specific_ptr'](http://boost.org/doc/libs/release/doc/html/thread/thread_local_storage.html#thread.thread_local_storage.thread_specific_ptr)を使用できますか? –

+0

@ Space_C0wb0y:おそらく、私は気にしません。私はそれの可能性を認識していなかったので:) – Goz

答えて

19

財団が-[NSThread threadDictionary]を提供します。これを使用して、スレッドローカルのObjective-Cオブジェクトを格納できます。これには、動的ストレージのアドレスをラップするNSValueを含めることができます。

Cocoaはスレッドコードのスレッドブラインド実行に移行しています。ここでは、使用可能なシステム所有スレッドで実行するコードブロックを送信します。これはグランドセントラルディスパッチと共有されたNSOperationQueueによって使用されるモデルです。スレッドローカルストレージに依存するコードは、このモデルを最大限に活用することはできません。詳細についてはAppleのConcurrency Programming Guideを参照してください。

ETA:のiOS 5/OS X 10.7以降では、グランドセントラル派遣はdispatch_queue_get_specific、あなたがdispatch_queue_set_specific経由キューのローカルストレージを呼び出すことができるもの得て、そしてdispatch_get_specific機能。 setterを使用すると、キーの新しい値を設定したとき、またはキューが破棄されたときの値に加えて、デストラクタ関数を指定することができます。 getter sans queueは、現在のキューをコンテキストとして使用します。キーが現在のキューに定義されていない場合は、現在のキューのターゲットキューでルックアップを繰り返します(プロトタイプOOシステムのプロパティルックアップと同様)。

関連する問題