首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Obj-C2.0中锁定合成原子@properties的详细信息

在Obj-C2.0中锁定合成原子@properties的详细信息
EN

Stack Overflow用户
提问于 2009-05-27 20:32:56
回答 2查看 5K关注 0票数 10

Obj-C2.0中的属性文档说原子属性在内部使用锁,但它没有记录锁的细节。有没有人知道这是一个基于属性的锁,一个独立于@synchronized(self)使用的隐式锁的每个对象的锁,或者等同于@synchronized(self)的锁?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-27 20:37:54

原子@properties使用的锁是一个实现细节--对于适当平台上的适当类型,可以在没有锁的情况下进行原子操作,如果苹果没有利用它们,我会感到惊讶。在任何情况下都不能对锁进行公共访问,因此您不能在同一锁上@synchronize。一些苹果工程师已经指出,原子属性并不能保证线程的安全性;原子属性只能保证该值的get/set是原子的。为了正确的线程安全,您必须使用更高级别的锁定或同步,并且几乎可以肯定的是,您不希望使用与synthesize getter/setter(s)可能正在使用的锁相同的锁。

票数 7
EN

Stack Overflow用户

发布于 2010-12-02 04:27:16

查看生成的代码(用于ARM的iOS SDK4.0/4.2),

使用objc_copyStruct().

  • double访问directly.

  • Larger-than-32-bit结构,使用objc_copyStruct访问
  • 32位assign属性(包括struct {int32_t v;}),但在int64_t 4.0上,使用stmia/ldmia直接访问结构除外(我不确定在interrupts).
  • retain/copy访问器调用objc_getProperty和ldmia的情况下,这是否保证是原子的

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/917884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档