Objective-C中允许嵌套同步块吗?

22
我在这篇文章中读到,在Java中允许嵌套同步块。我知道Objective-C的同步块看起来很像Java的。所以我想知道:Objective-C中是否允许嵌套块?
我还有一个附加问题:递归块存在实际限制吗?
谢谢您迅速的回答!
1个回答

28

是的,它们是支持递归和可重入代码的。从文档(现已停用)中可以看到:

Objective-C同步功能支持递归和可重入代码。一个线程可以以递归方式多次使用单个信号量;其他线程被阻塞,直到该线程释放所有使用它获取的锁;也就是说,每个@synchronized()块都正常退出或通过异常退出。

有关性能的讨论和其他同步/锁定方法,请参见此处


感谢@bkbeachlabs。我已经更新了我的链接,指向旧版本/存档版本。我不确定您在当前文档中是否可以找到“@synchronized是可重入的”保证。 - jtbandes
1
现在可以在此处找到它:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocThreading.html#//apple_ref/doc/uid/TP30001163-CH19-SW1"Objective-C同步特性支持递归和可重入代码。线程可以以递归方式多次使用单个信号量;其他线程被阻止使用它,直到该线程释放使用它获取的所有锁;也就是说,每个@synchronized()块正常退出或通过异常退出。" - MrHappyAsthma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接