objective-c - 如何避免 @synchronized(self) 上的死锁?

标签 objective-c multithreading cocoa synchronization deadlock

我的 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/

相关文章:

ios - 如何在不打开短信弹出窗口的情况下以编程方式在后台发送短信?

objective-c - 是否可以编译更新版本的 LLVM 并将其与 Xcode 一起使用?

java - 使用 onKeyReleased 事件创建搜索引擎的用途

java - 线程化 Matlab 代码

objective-c - 每次在核心数据中插入数据后,应用程序变得更慢

ios - 在 Swift 中使用 CFReadStreamCreateWithFTPURL 测试 FTP 连接

ios - AFNetworking在JSON响应键中添加引号

java - LinkedBlockingQueue 上的 add() 是否通知等待线程?

objective-c - NSDictionary 只返回一项

objective-c - 如何使用 NSVisualEffectView 制作平滑、圆润、类似体积的 OS X 窗口?