2011-12-23 6 views
3

NSEnumerationConcurrentを使用してブロックを使用してコレクションを列挙している場合、Cocoaはブロックが同時に実行されることを保証しますか?それとも実際に列挙する必要があるオブジェクトの数に依存していますか?さらに、操作が実際に並行している場合、Cocoaは起動するスレッドの数をどのように決定しますか?NSEnumerationConcurrentはマルチスレッドを保証しますか?

EDIT:追加の質問

別のノートで、NSEnumerationConcurrentオプション同期または非同期でコレクションを列挙されましたか?言い換えれば、列挙コードの下にいくつかのコードがある場合、すべての並行列挙が完了した後にのみ実行されますか? (スレッド参加?)

答えて

5

いいえ、NSEnumerationConcurrentは、ブロックが同時に実行されることを保証しません。

たとえば、 - [NSArray enumerateObjectsWithOptions:usingBlock:]を使用すると、その呼び出しは列挙が完了するまで戻りません。

NSEnumerationConcurrentを指定した場合、現在の実装ではグローバル通常優先順位GCDキューでこれらのブロックがスケジュールされているようです。私はそれが常に真実であることが保証されていないと確信しています。

希望に役立ちます。

関連する問題