Dan*_*nra 11 cocoa atomic retain
NSObject的保留方法是原子的吗?
例如,当从两个不同的线程保留相同的对象时,它是否承诺保留计数增加了两倍,或者保留计数是否可能只增加一次?
谢谢.
小智 13
NSObject以及对象分配和保留计数功能是线程安全的 - 请参见" 线程编程指南"中的附录A:线程安全摘要.
编辑:我决定看一下Core Foundation的开源部分.在CFRuntime.c中,__CFDoExternRefOperation()是负责更新保留计数器的函数.它测试进程是否有多个线程,如果有多个线程,它会在更新保留计数之前获取自旋锁,从而使该操作线程安全.
有趣的是,保留计数不是struct(类)意义上的对象的属性(或实例变量).运行时使用保留计数器保持单独的结构.事实上,如果我理解正确,这个结构是一个哈希表数组,并且每个哈希表都有一个自旋锁.这意味着锁是指已放置在同一哈希表中的多个对象,即锁既不是全局的(对于所有实例)也不是每个实例.
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |