我有一个 NSOperationQueue,里面有很多 NSOperations。我想确保代码的特定部分不会并行执行。我使用这样的 NSLock 对象:
[myLock lock]
some critical code
[myLock unlock]
不幸的是,我收到以下错误,而不是阻塞“锁定”调用:
-[NSLock 锁定]: 死锁 ('(null)')
经过一番调查,我注意到所有 NSOperations 似乎都在同一个线程中运行。在记录线程 ID 后,我得出了这个结论:
NSLog(@"Thread %@\n", self, [NSThread currentThread]);
所有操作似乎都在同一个线程中运行。即使它们作为操作并行运行。
那有意义吗?我有点困惑。我错过了什么吗?你觉得同时使用 NSOperation 和 NSLock 有什么问题吗?(如果不是,那么我确定错误在我的代码中)