gpt4 book ai didi

cocoa - NSObject的retain方法是原子的吗?

转载 作者:行者123 更新时间:2023-12-03 16:03:45 25 4
gpt4 key购买 nike

NSObject的retain方法是原子的吗?

例如,当从两个不同的线程保留同一个对象时,是否允许保留计数增加两次,或者保留计数是否可以只增加一次?

谢谢。

最佳答案

NSObject 以及对象分配和保留计数函数都是线程安全的 - 请参阅 Appendix A: Thread Safety SummaryThread Programming Guide .

<小时/>

编辑:我决定看一下 Core Foundation 的开源部分。在 CFRuntime.c , __CFDoExternRefOperation() 是负责更新保留计数器的函数。它测试进程是否有多个线程,如果有多个线程,它会在更新保留计数之前获取一个自旋锁,从而使该操作成为线程安全的。

有趣的是,保留计数并不是struct(类)意义上的对象的属性(或实例变量)。运行时保留带有保留计数器的单独结构。事实上,如果我理解正确的话,这个结构是一个哈希表数组,每个哈希表都有一个自旋锁。这意味着锁引用已放置在同一哈希表中的多个对象,即锁既不是全局的(对于所有实例)也不是每个实例的锁。

关于cocoa - NSObject的retain方法是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com