我的 Objective-C 项目中有一些同步。代码如下所示:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
//some code
@synchronized(self) { //at this line deadlocks
//some code
}
//some code
}
在这一行(@synchronized
)上,总是会发生死锁。我还可以看出这个委托(delegate)方法被经常调用。
如何避免此类僵局?
最佳答案
这意味着来自另一个线程的锁永远不会释放 @synchronized(self)
获取的锁 - 您可能正在等待某些事情完成,这发生在另一个线程上,试图访问从另一个点持有锁。查找此问题(如果暂停,您可能会看到另一个线程在调试器中等待)。这也表明您的锁被持有很长一段时间 - 如果您想有效地使用并发性,只需要短时间持有它们。
关于objective-c - 如何避免 @synchronized(self) 上的死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9418694/