re: Psychotik の提案:volatile
は、C のキーワードであり、基本的に、それが接続されているシンボルの使用を最適化しないようにコンパイラに指示します。これは、マルチスレッド コード、またはハードウェアと直接インターフェイスするコードにとって重要です。malloc()
ただし、(またはからの) メモリのブロックを操作するのにはあまり役に立ちませんNSData
。psychotik が言ったように、またはポインターなどのプリミティブで使用するためのものですint
(つまり、ポインター自体であり、ポインターが指すデータではありません)。データへのアクセスを高速化しますが、実際には、コンパイラの最適化トリックを無効にすることで速度を低下させる可能性があります。
クロススレッド同期の場合、最速の賭けは、OSSpinLock
再帰アクセスが必要ない場合、または必要な場合はpthread_mutex
再帰として設定することだと思います。OSSpinLock
名前が示すように、 はスピン ロックであるため、特定の使用パターンでは よりも効率が低くなりますがpthread_mutex
、金属に非常に近いことに注意してください (ハードウェアのアトミックな get/set 操作に基づいています) 。
データが実際に頻繁にアクセスされてパフォーマンスのロックが懸念される場合は、おそらく避けNSData
て、メモリのブロックで作業することをお勧めしmalloc()
ますが、何を達成しようとしているのか、またはデータにアクセスする頻度が高いほど、ソリューションはすぐには現れません。あなたの意図について詳しく教えていただけますか?