NSOperation不会产生新的线程?

时间:2010-11-26 22:47:26

标签: objective-c multithreading locking nsoperation nsoperationqueue

我有一个NSOperationQueue,其中包含许多NSOperations。我想确保代码的特定部分不是并行执行的。我使用这样的NSLock对象:

[myLock lock]
some critical code
[myLock unlock]

不幸的是,我没有阻止“锁定”调用,而是出现以下错误:

- [NSLock lock]:死锁('(null)')

经过一番调查后,我注意到所有NSOperations似乎都在同一个线程中运行。在使用以下命令记录线程ID之后,我得出了这个结论:

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

所有操作似乎都在同一个线程中运行。即使它们作为操作并行运行。

这有意义吗?我有点困惑。我错过了什么吗?你看到使用NSOperation和NSLock有什么问题吗? (如果没有,那么我确定错误在我的代码中)

1 个答案:

答案 0 :(得分:4)

我解决了。我在下面使用ASIHTTPRequest。显然所有HTTP调用都在同一个线程中进行,除非你覆盖“+(NSThread *)threadForRequest:(ASIHTTPRequest *)请求”。

对不起。