gpt4 book ai didi

objective-c - 在 Obj-C 2.0 中锁定合成原子 @properties 的细节

转载 作者:太空狗 更新时间:2023-10-30 03:26:00 24 4
gpt4 key购买 nike

Obj-C 2.0 中的属性文档说原子属性在内部使用锁,但它没有记录锁的细节。有谁知道这是每个属性锁、每个对象锁与@synchronized(self) 使用的隐式锁分开,还是与@synchronized(self) 等效?

最佳答案

查看生成的代码(iOS SDK GCC 4.0/4.2 for ARM),

  • 32 位 assign 属性(包括 struct {int32_t v;})被直接访问。
  • 使用 objc_copyStruct() 访问大于 32 位的结构。
  • doubleint64_t 可以通过 objc_copyStruct 访问,除了在 GCC 4.0 中它们可以直接通过 stmia/ldmia 访问(我不确定这是否保证在中断的情况下是原子的)。
  • 保留/复制访问器调用 objc_getProperty 和 objc_setProperty。

Cocoa with Love: Memory and thread-safe custom property methodsruntime version objc4-371.2 中提供了有关如何实现它们的一些详细信息;显然,不同运行时的精确实现可能会有所不同(例如,在某些平台上,您可以使用原子交换/CAS 在 ivar 本身上自旋,而不是使用另一个锁)。

关于objective-c - 在 Obj-C 2.0 中锁定合成原子 @properties 的细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917884/

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