複数の独立したタスクを並列実行するためにGrandCentralDispatchのdispatch_applyメソッドを使用して、iOSアプリを高速化しようとしています。ただし、これらのタスクは読み取り専用リソース(大きなuint8_t配列)を共有します。このリソースには、読み取り専用の非アトミックオブジェクトプロパティを介してアクセスします。読み取り専用リソースであるため、同期アクセスは必要ありません。それにもかかわらず、共有読み取り専用配列は実行を非常に遅くします。すべてのタスクのシリアル実行よりもさらに低速です。しかし、スレッドごとに配列のローカルコピーを作成すると、タスクは非常に高速に実行されます。
読み取り専用リソースの場合にGCDの恩恵を受けるために、スレッドごとにコピーを作成する必要がある理由がわかりません。GCDが読み取り専用リソースであることを認識していないために実行時間を遅くする自動内部同期が行われていますか?スレッドごとにリソースのローカルコピーを作成せずに、速度低下を防ぐことはどういうわけか可能ですか?
事前にどうもありがとうございました!