2

我有一个 NSOperationQueue,里面有很多 NSOperations。我想确保代码的特定部分不会并行执行。我使用这样的 NSLock 对象:

[myLock lock]
some critical code
[myLock unlock]

不幸的是,我收到以下错误,而不是阻塞“锁定”调用:

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

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

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

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

那有意义吗?我有点困惑。我错过了什么吗?你觉得同时使用 NSOperation 和 NSLock 有什么问题吗?(如果不是,那么我确定错误在我的代码中)

4

1 回答 1

4

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

对不起。

于 2010-11-27T00:06:43.270 回答