NSObject的retain方法是原子的吗?

2024-06-21

NSObject的retain方法是原子的吗?

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

Thanks.


NSObject以及对象分配和保留计数函数都是线程安全的 - 请参阅附录 A:线程安全总结 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html in the 线程编程指南 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/.


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSObject的retain方法是原子的吗? 的相关文章

随机推荐

  • python sqlite“开始事务”和“提交”命令

    如果我想通过 python 在数据库中启动事务 我必须像这样显式执行 sql 命令 BEGIN TRANSACTION import sqlite3 conn sqlite3 connect db c conn cursor c execu
  • 对原型绑定感到困惑,这个声明

    在下面的代码中 我想知道上下文如何绑定到this In obj myMethod 上下文被赋予对象 因此记录它会给出对象 In var myFun obj myMethod then myFun 上下文被赋予窗口 唯一的区别是您将函数设置为
  • 如何保留超过 5 天的查询日志?

    在 Redshift 中 有一个STL QUERY存储过去 5 天运行的查询的表 我正在尝试找到一种方法来保存超过 5 天的记录 以下是我考虑过的一些事情 有红移设置吗 看来不是 我可以使用触发器吗 Redshift 中不提供触发器 因此这
  • 类库的 app.config 中的绑定重定向有什么作用吗?

    我经常使用的 VS 解决方案包括单个可执行项目 控制台应用程序 网络应用程序 和许多类库项目这些都被可执行文件引用 使用 NuGet 并安装包时 经常会出现app config为每个项目创建的文件 通常只包含合并引用程序集版本的绑定重定向列
  • scala 贷款模式,可选函数参数

    我有一个贷款模式 该模式应用函数 n 次 其中 i 是递增变量 偶尔 我希望传入的函数能够访问 i 但我不想要求传入的所有函数都需要定义一个参数来接受 i 下面的例子 def withLoaner n Int gt op Int gt St
  • Jquery在quote中设置引号

    我有这样的代码 input id id slice 0 1 br brand qnt to cart show 这产生了我 input id 02620 br FEBI BILSTEIN qnt to cart 但我需要看到类似的东西 in
  • PHP表单提交后如何显示成功消息?

    这是代码 我想要这样 表单提交 gt page2 php gt 重定向 gt page1 php 这是消息 弹出窗口或其他内容 page1 php
  • Excel VBA:声明通用对象与指定对象类型之间的区别

    我发现使用声明为的变量出现了意外的 至少对我来说 行为Object在 Excel vba 中 我试图从 html 页面中提取一些数据 所以我使用了这样的例程 sub Test Dim htmlPage As htmlDocument Thi
  • 如何关闭 RStudio 中的突出显示环绕行为?

    我已经搜索过这个问题 很可能我只是想不出正确的搜索词 所以如果这个问题已经被问到并得到回答 我深表歉意 我还检查了 RStudio 选项 在 RStudio 中 如果突出显示某个单词 然后键入单引号 双引号或括号 它会将该单词包含在该字符中
  • yii2 将 JS 文件注册到视图

    我有 A php 视图文件 views A 文件夹 我有 A js js 文件 views A 文件夹 请帮我在视图文件中注册js文件 据我了解 我必须写 this gt registerJsFile path to file js 在视图
  • 仅 HTTP 支持跨源请求,但不支持跨域

    我使用此代码发出 AJAX 请求 userBarSignup click function get C xampp htdocs webname resources templates signup php params function
  • “canvas.toDataURL(“image/png”)”在 Firefox 中无法正常工作

    我有一个带有文件输入字段的网页 我想 上传图像文件 使用上传的图像创建图像元素 把它画在画布上 获取画布的 DataURL 此过程适用于 Google Chrome 但不适用于 Mozilla Firefox 当我 console log
  • 使用Qt5的QWebEngine

    14784 PyInstaller Bootloader 3 x 14784 LOADER executable is C Users Desktop Papinhio player exe dist Papinhio player exe
  • 使用 @Inheritance(strategy=InheritanceType.JOINED) 与实体进行 JPA 一对多关联

    大家好 我正在尝试将一对多关联映射到映射的实体 Inheritance strategy InheritanceType JOINED ManyToMany JoinTable name S MC CC CONTRATTIRAPPORTI
  • 如何将 JSON 转换为 Scala 中的类型

    我的问题是我收到来自 twitter 的 JSON 文本 然后我想将此文本转换为 scala 中的本机对象 有标准方法可以做到这一点吗 我也在用Play 2 这是我所拥有的 import scala io Source fromInputS
  • 组内 STRING_AGG 和 Visual Studio 的问题

    我正在使用 Visual Studio 2015 并且我的 SQL Server 数据库项目中的 STRING AGG Within GROUP 出现问题 SELECT Continent STRING AGG Country WITHIN
  • 数组到集合:优化代码

    有更好的方法来实现这一目标吗 public static List
  • 为什么我需要 2 个或更多核心数据模型?

    我很想知道谁使用多个核心数据模型以及为什么 有什么好处 我正在开发一个应用程序 我认为我可以从多个模型中受益 但我不确定其他好处 我即将推出的应用程序将适用于 iPad 和 iPhone 的另一个版本 iPad 有 3 个主要内容 iPho
  • Rust 特征问题 特征不能变成对象

    我正在尝试编写一些代码来生成具有随机值的随机结构 我有以下结构的特征和辅助宏 use rand thread rng Rng use std fmt pub trait DataType generate a new instance of
  • NSObject的retain方法是原子的吗?

    NSObject的retain方法是原子的吗 例如 当从两个不同的线程保留同一个对象时 是否允许保留计数增加两次 或者保留计数是否可以只增加一次 Thanks NSObject以及对象分配和保留计数函数都是线程安全的 请参阅附录 A 线程安