我有一个NSOperationQueue,其中包含许多NSOperations。我想确保代码的特定部分不是并行执行的。我使用这样的NSLock对象:
[myLock lock]
some critical code
[myLock unlock]
不幸的是,我没有阻止“锁定”调用,而是出现以下错误:
- [NSLock lock]:死锁('(null)')
经过一番调查后,我注意到所有NSOperations似乎都在同一个线程中运行。在使用以下命令记录线程ID之后,我得出了这个结论:
NSLog(@"Thread %@\n", self, [NSThread currentThread]);
所有操作似乎都在同一个线程中运行。即使它们作为操作并行运行。
这有意义吗?我有点困惑。我错过了什么吗?你看到使用NSOperation和NSLock有什么问题吗? (如果没有,那么我确定错误在我的代码中)
答案 0 :(得分:4)
我解决了。我在下面使用ASIHTTPRequest。显然所有HTTP调用都在同一个线程中进行,除非你覆盖“+(NSThread *)threadForRequest:(ASIHTTPRequest *)请求”。
对不起。