针对Objective-C运行时功能的线程安全保证?

问题描述:

Objective-C运行时函数的线程安全性有什么保证?有没有?我正在讨论在runtime.h中声明的函数(例如,class_lookupMethod,objc_setAssociatedObject)。针对Objective-C运行时功能的线程安全保证?

它有很多是线程安全的 - 搅拌等 - 但其中一些不是。查找一种方法应该是。关联的对象可能不是。如果他们没有明确记录,那么他们应该被视为不是线程安全的。

查看运行时的源代码。其中的评论可能是照亮的。如果还不是很清楚,请提交一份要求在文档中进行澄清的错误。

+0

谢谢,这是照亮。现在是否有理由期望一个实施方法能够使线程安全,在不久的将来它不会改变?我查看了http://opensource.apple.com/source/objc4/objc4-493.9/runtime/objc-references.mm,它利用自旋锁来获取/设置关联参考。我将提交一份错误报告,要求提供更多文档。 –

+0

假设在(已发布的)API或运行时中记录为线程安全的任何实现将保持线程安全 - 尽管任何事情都是可能的,所以阅读未来版本的发行说明总是一个好主意。 – matthias

+0

是的 - 目前故意线程安全的东西不太可能在未来会退化为线程不安全,这是因为那会倒退一步,并且会导致二进制兼容性问题。很明显,正确的文件使合同变得更加强大。 – bbum