2

いくつかのNSOperationsを含むNSOperationQueueがあります。コードの特定の部分が並行して実行されないようにしたい。私は次のようなNSLockオブジェクトを使用します。

[myLock lock]
some critical code
[myLock unlock]

残念ながら、「ロック」呼び出しをブロックする代わりに、次のエラーが発生します。

-[NSLockロック]:デッドロック('(null)')

調査の結果、すべてのNSOperationが同じスレッドで実行されているように見えることに気付きました。スレッドIDを次のように記録した後、その結論を導き出しました。

NSLog(@"Thread %@\n", self, [NSThread currentThread]);

すべての操作は同じスレッドで実行されているようです。それらは操作として並行して実行されていますが。

それは理にかなっていますか?私は少し混乱しています。私は何かが恋しいですか?NSOperationとNSLockを一緒に使用することに問題がありますか?(そうでない場合は、エラーが私のコードにあると確信しています)

4

1 に答える 1

4

私はそれを解決しました。下でASIHTTPRequestを使用しています。「+(NSThread *)threadForRequest:(ASIHTTPRequest *)request」をオーバーライドしない限り、すべてのHTTP呼び出しは同じスレッドで行われるようです。

ごめん。

于 2010-11-27T00:06:43.270 に答える