编码风格:锁定/解锁内部还是外部?

2023-12-26

另一个可能愚蠢的问题:

并发应该如何锁定?执行者或调用者应该负责锁定线程吗?

例如没有特定的语言...

Caller::callAnotherThread() {
    _executor.method();
}

Executor::method() {
    _lock();
    doSomething();
    _unlock();
}

OR

Caller::callAnotherThread() {
    _executor.lock()
    _executor.method();
    _executor.unlock()
}

Executor::method() {
    doSomething();
}

我对线程和锁定知之甚少,所以我想确保代码是健壮的。第二种方法允许线程不安全调用...从技术上讲,您可以调用 _executor.method() 而不执行任何类型的锁定。

Help?

Thanks,


被调用者而不是调用者应该执行锁定。被调用者是唯一知道什么需要同步并且唯一能够确保同步的人。如果你将锁定留给调用者,你会做三件坏事:

  1. 您增加了功能/类用户的负担,增加了设计粘度。
  2. 您使调用者可以在不获取锁定的情况下更新共享状态。
  3. 如果不同的函数以不同的顺序获取多个锁,则可能会出现死锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编码风格:锁定/解锁内部还是外部? 的相关文章

  • Apple 如何在机场菜单打开时更新它? (当 NSMenu 已经打开时如何更改它)

    我有一个状态栏项目 可以弹出一个 NSMenu 并且我有一个委托集 并且它已正确连接 void menuNeedsUpdate NSMenu menu工作正常 也就是说 该方法设置为在显示菜单之前调用 我需要监听该方法并触发异步请求 稍后在
  • 如何从日期中获取小时、分钟和上午/下午? [复制]

    这个问题在这里已经有答案了 我尝试从日期中提取小时 分钟和上午 下午 但我得到 NULL 输出 我在下面显示了我的代码 请查看 NSString dateStr 29 07 2013 02 00am NSDateFormatter form
  • Xcode 4 调试器代码完成

    首先 很高兴他们尝试在 Xcode 4 中的 gdb 命令提示符上完成代码 但在当前状态下 它使得使用命令提示符来调查目标 c 对象几乎不可能 当我打字时 它自动将单词补全为我不想要的内容 并且如果不手动选择文本并将其删除 然后重新开始 则
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • 如何修复 ReactiveCocoa(带有 CocoaPods)的安装?

    这里是新手 尝试将 ReactiveCocoa 2 2 4 和 CocoaPods 安装到项目中 但在运行时遇到错误 我用过github 上的这个 podspec https github com CocoaPods Specs blob
  • Objective C (iphone) 关于发布的问题

    如果我创建一个视图 并将其添加为子视图并将其添加到数组中 是否必须释放它两次 UIView cat UIView alloc initWithFrame someFrame self view addSubview cat self ani
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th
  • 为具有多个目标和不同平台的项目编写 Podfile

    我正在准备一个支持 OS X 和 iOS 的 Pod 我的 pod 有一些自己的依赖项 这些依赖项在 podspec 文件中定义 因此我使用 Podfile 来管理我用来开发 pod 和运行测试的项目的依赖项 我正在使用 CocoaPods
  • 如何为图层阴影不透明度设置动画?

    我有一个视图 我已将 LayerOpacity 设置为 1 theView layer shadowOpacity 1 0 当视图位于屏幕下方时 这看起来很好 当我将此视图向上移动以与另一个有阴影的视图齐平时 它们看起来不太好 有没有办法让
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 在成为FirstResponder或resignFirstResponder的情况下将对象保持在键盘顶部?

    我目前在键盘顶部有一个 UITextField 当您点击它时 它应该粘在键盘顶部并平滑地向上移动 我不知道键盘的具体时长和动画类型 所以确实很坎坷 这是我所拥有的 theTextView resignFirstResponder UIVie
  • 如何清除代码中的 NSLog 输出?

    有没有办法清除代码中的控制台输出 thanks 我喜欢的快捷方式 Simply USE K Keyboard Shortcut when you want to clear the NSLOG Data
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • Objective-C 中是否有命名初始化方法的约定?

    在可以通过不同的 init 方法初始化的 Objective C 类中 将所有初始化程序共用的初始化代码收集到一个从其他 init 方法 有时也从从 Nib 唤醒 是否有关于如何命名该方法的约定 初始化器 初始化公共 根据 Apple 的说
  • 如何为 NSAttributedString 内的文本设置“隐藏”属性?

    我有一个 Cocoa 应用程序NSTextView控件将其文本保存在NSAttributedString 实际上我相信这是一个NSMutableAttributedString 我可以轻松地在该字符串内的不同字符范围上设置和修改不同的文本属
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • 如何从 AFNetworking 和 AFJSONRequestOperation 获取可变字典?

    我将 JSONKit 与 AFNetworking 的 AFHTTPClient 带有 AFJSONRequestOperation 一起使用 我似乎无法弄清楚如何触发使用 JSONKit 的 mutableObjectFrom 方法 而不
  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行

随机推荐

  • 使用多设备混合应用程序构建 Visual Studio Cordova 应用程序时发生错误

    我收到 3 个致命错误 我也安装了android SDK 19 有任何想法吗 An error occurred while listing Android targets C Project AngularJS ToDo Sample f
  • 不是 JAX-WS 中的有效服务异常

    我正在参考http www mkyong com webservices jax ws jax ws hello world example http www mkyong com webservices jax ws jax ws hel
  • 使用 sqlplus 命令行隐藏纯文本密码

    我希望使用 sqlplus 命令 并在视图中隐藏密码 这样它就不会显示在 ps ef 命令中 我知道互联网博客上提供了很多解决方案 但大多数似乎都需要管理员权限 并且我对此服务器的访问受到限制 其余的似乎对我不起作用 我当前使用的命令如下
  • 在附加到 Refit 客户端的 Polly 策略中使用 ILogger

    我一直在尝试遵循以下指示这篇博文 https www stevejgordon co uk passing an ilogger to polly policies将 ILogger 传递到我的重试策略 以便记录有关重试错误的信息 博客中的
  • ember-data 作为 d3 的数据

    我想使用我的 emberdata 作为在 d3 中创建对象的数据 我尝试将控制器模型中的项目转换为新的 javascript 对象 并将这个新数组提供给 d3 数据 这是代码 App GraphicsView Ember View exte
  • smart-table - 如何重置过滤器集合?

    Angular 和智能表新手 此智能表设置可以正常工作并正确过滤 但尝试重置或清除过滤器不会重新过滤表 为什么不 使用 ng model 绑定更新输入是否不会触发 smart table 正在寻找的监视 Plunker 可以在这里找到 ht
  • h1 和跨度

    在我的 html 中使用 h1 h6 标签时 我不断收到 w3c 验证器上的错误消息 我对此很陌生 我已经尝试了很多次来解决这个问题 但我不能 该文本在我的网站上显示得很好 但无法验证 我该如何解决这个问题 错误信息如下 第 34 行 第
  • 如何在CodeIgniter中获取表的最后一条记录?

    如何在Codeigniter中获取表的最后一条记录 我的表名称是 post 我想获取该表中最后一条记录的最后一个 id 或下一个 id recommended don t use from getting rows insted of pl
  • 如何使用 Web API 2 + AspNet Identity 2 扩展 IdentityRole

    我正在尝试扩展最新版本的 Visual Studio 2013 中的 Web API 2 包含个人帐户 模板中提供的 AspNet IdentityRole 类 当我点击 api roles 时 它返回一个空数组 身份模型 namespac
  • python 中不可散列对象的集合

    有没有相当于python的东西set对于不可散列的对象 例如可以相互比较但不能散列的自定义类 如果你的值不可散列 那么就有no point在使用set 只需使用一个list反而 如果您的所有对象所能做的就是测试相等性 那么您必须扫描每个元素
  • WC_Checkout 挂钩中订单行项目和订单元之间的差异

    我正在创建一个正在使用的插件woocommerce checkout update order meta用于添加订单项元数据的钩子 我有一个插件叫WooCommerce TM 额外产品选项安装 这个插件使用woocommerce check
  • 使用forever和always语句

    以下两个代码都会生成一个时钟 我需要知道除了时钟生成之外 永远循环是否还有其他用途 我只在时钟一代中遇到过永远 如果只是为了这个目的 那岂不是毫无用处 initial begin clk 0 forever begin 5 clk clk
  • CakePHP 和 SSL

    我刚刚在使用 CakePHP 的网站上安装了 SSL 证书 现在该网站不再从 webroot 加载文件 图像 css 文件 有任何想法吗 我认为 SSL 安装影响了 mod rewrite 或类似的东西 我刚刚遇到这个问题 检查您的 apa
  • SQL“AT TIME ZONE”,查询范围并使用“SELECT”所有列(表名。*)表达式

    I use timestamp 3 with time zone在我的数据库中 当需要一个表时 这几乎是我的情况的任何情况 我需要在比以下更复杂的查询中选择表的所有列 我的问题是如何使用 SQL 获取所需时区的时间戳 带时区 at time
  • svn - 如何下载 llvm、clang 的特定版本

    当我 svn co llvm 3 3 clang 3 3 compiler rt 时 构建通过 但构建没有在构建 调试 断言中创建 clang exe 当我只为 svn co build 添加 clang 时 没有通过 但他创建了 clan
  • 由于长数据类型导致的 VBA-Excel 溢出错误

    这似乎太容易了 但我是如此绝望 我需要做的是得到最后的值列 D 的 数量大 前任 987654321 如果值只有两位数 则代码没问题 我只是无法识别问题所在 Dim lastRow As Long lastRow Cells Rows Co
  • PostgreSQL:如何使用generate_series()找出列中缺失的数字?

    SELECT commandid FROM results WHERE NOT EXISTS SELECT FROM generate series 0 119999 WHERE generate series results comman
  • 如何仅将一个窗口保留在我的应用程序中的所有其他窗口之上?

    我想在我的 C Windows 窗体应用程序中显示一个状态窗口 在应用程序等待获取锁时通知用户 这是应用程序定义的事情 但是 该窗口应该是可见的 并且始终保持在应用程序的所有其他窗口之上 即使用户单击另一个窗口 例如其后面的较大主窗口 也是
  • 如何使用 css 通过 href #id 隐藏锚标记

    我有不同的带有 href ids 的锚标记 我需要使用通用的 css 规则来隐藏它们 Content xxxxxxxxx a href tab1 Table 1 a Content xxxxxxxxxxxx a href tab2 Tabl
  • 编码风格:锁定/解锁内部还是外部?

    另一个可能愚蠢的问题 并发应该如何锁定 执行者或调用者应该负责锁定线程吗 例如没有特定的语言 Caller callAnotherThread executor method Executor method lock doSomething