跨线程事件信号(Obj-C)的同步/等待设计?

2023-12-14

在 Cocoa 应用程序中,我有这样的设置:

  1. 主线程 (M) 可以向某个后台“生产者”线程 (B) 提交请求以完成某些工作,例如项目 X 的​​计算结果。
  2. 此后不久,另一个后台线程 (C) 可能需要计算项 X 的结果,并且需要同步这些结果。

线程 C 本身可以同步地重新执行工作,但是如果线程 B 恰好已经在计算项 X 的中间,我希望线程 C 阻塞并从 B 获取结果。计算结果可以在磁盘,因此数据传递不是问题。

在线程 B 完成项目 X 之前阻塞线程 C 的最佳方法是什么?

请注意,B 处理的项目是任意的——X 只是此示例中的众多项目之一。我想阻止直到具体的项目 X 完成。

所以从概念上讲,我想要的是线程 B 在开始说“我正在处理 X”时设置某种标志的方法,如果 C 进来并看到该标志,它就会等待该标志被清除,然后得到结果。

不确定我是否可以以某种方式将 NSLocks 强加到这个角色中,或者操作系统中是否有更好的原语。

欢迎任何想法(或问题的潜在重构)!谢谢。


如果可能的话,使用NSOperation。它有一个-waitUntilFinished允许同步计算的方法。你只需要一些线程安全的存储机制来让你找到NSOperation对于您正在计算的项目,如果它已经存在,例如,NSLock守护着一个NSDictionary.

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

跨线程事件信号(Obj-C)的同步/等待设计? 的相关文章

  • NSUInteger 的奇怪行为 - 无法正确转换为浮动

    这是我的情况 这让我发疯 我有一个计数值为 517 的 NSMutableArray 我有一个双精度值 它是我的乘数 double multiplier 0 1223 double result myArray count multipli
  • 生成具有固定数字长度的随机数?

    我正在生成随机数 int randomID arc4random 3000 但我想生成至少 4 位数字的随机数 如 1000 2400 1122 我想知道 Objective C 的代码 请尝试 生成数字 1000 9999 int ran
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • C# 中什么时候应该使用 volatile 关键字?

    谁能提供一个很好的解释volatile https learn microsoft com en us dotnet csharp language reference keywords volatileC 中的关键字 它解决了哪些问题 没
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝

随机推荐

  • 在 emgucv 上寻找运动检测功能

    我是 emgu 简历的新手 我正在尝试找到一个进行运动检测的代码 我试过这个 CvInvoke cvAbsDiff frame backgroundImage BgDifference 但我有照明问题 我想把有运动的像素变成白色 然后在只有
  • 找不到类:com.google.common.collect.Lists

    I am attaching a screen shot of the problem that I am facing with Renjin Engine Please see the image below I m not able
  • 我需要多少个进程来监视两个信号?

    我是一名 vhdl 初学者 需要帮助解决我的问题 我有两个需要监控的信号 一个是 CHECK 另一个是 OK 每次我要求检查时 我都应该得到好的结果 高或低 我需要连续监测6个连续的CHECK脉冲 并计数OK 如果我有 6 OK 低 那么我
  • Flutter Firebase Auth / Google_sign_in 无法登录,状态代码=CANCELED

    这是我的 pubspec yaml 我正在使用颤振 dependencies flutter sdk flutter cupertino icons 0 1 2 shared preferences 0 4 2 json serializa
  • 使用 PHP 从 pdf 中提取内容

    您能告诉我如何使用 PHP 从 PDF 文档中提取内容吗 格式化是我在这里面临的主要问题 因此 如果有一些方法可以提取相同格式的内容并将其显示在在线文本编辑器上 请告诉我 Thanks 看一下XPDF 我想你可以做 text shell e
  • 防止WebSQL数据库中的SQL注入? (如何处理数据中的引号?)

    我目前正在将 mysql 数据库的 xml 导出导入到 websql 数据库中 以用于在线移动体验 一切工作正常 直到我插入的任何字符串中出现双引号 通常 在 PHP 中我会在插入时使用类似 mysql real escape string
  • 通过网络发送数据并以倍频程绘图

    我正在研究一个机器人 我的目标是绘制机器人的状态 目前 我的工作流程是这样的 启动程序 重定向文件中的输出 robot bash rosrun explo explo node gt states txt 将文件发送到我的本地计算机 rob
  • 在 R 中将大向量分割成区间[重复]

    这个问题在这里已经有答案了 我对 R 不太擅长 我运行了这个循环 得到了一个包含 11 303 044 行的巨大结果向量 我有另一个由维度为 1681 行的循环产生的向量 我希望运行一个chisq test来比较它们的分布 但由于它们的长度
  • jQuery UI 可拖动/可排序/可放置在达到可放置限制时禁用放置

    JS Bin 演示 Task 我正在使用 jQuery UI 创建事件调度程序 事件有一定的长度 以分钟为单位 并且可以将它们拖到不同的日期 每个日期都有自己的最大长度 以分钟为单位 在示例中 每天的最大长度为 480 分钟 并且不应允许插
  • Electron 带有节点通知程序显示 Windows 10 通知

    我正在尝试制作一个简单的应用程序 单击按钮时应显示通知 问题是通知没有显示 但 console logs 正在显示 通知应该在开发模式下工作吗 意思是只是运行electron 而且我不必构建和安装该应用程序 Windows操作系统 版本 W
  • 如何增加 FOR 循环语句中的 FOR 循环值?

    我想知道如何增加 FOR 循环语句中的值 这是我的代码 function Check var MemoryData Array of byte MemorySignature Array of byte Position integer b
  • 拟合多峰分布

    假设我们有两个正态分布的线性组合 我认为人们会将结果称为多模态分布 import numpy as np import matplotlib pyplot as plt from scipy stats import norm ls np
  • 查询中的 Linq Convert.ToInt32

    我有一些代码 from AspNetUsers in db AspNetUsers join UserDetails in db UserDetails on new Id Convert ToInt32 AspNetUsers UserD
  • Python 多处理:进程无法启动

    我是新来的multiprocessing在Python 2 7 中 我尝试运行以下代码 from time import sleep from multiprocessing import Process import multiproce
  • 返回 Haskell 中字符串的第一行

    我有一个相当简单的问题 但我很困惑 基本上 我只需要编写一个函数 它接受一个字符串 将其分成几行 接受第一行并以格式正确的 HTML 标题标记返回第一行 老实说 我只是不知道从哪里开始 任何事情都会有所帮助 我确实有代码 但这只是我用来对输
  • JDK 7的支持终止如何影响Android开发

    Oracle 已宣布他们停止了 JRE 7 的官方更新并且JDK 7 据我所知 Google没有说任何关于JDK 8的信息 我猜Android开发的推荐版本是JDK 7 Android 开发是否正式支持 JDK 8 谷歌Android开发p
  • Visual Studio 2010 中的异步、等待

    我在VS2010和VS2012中运行了下面的代码 但VS2012只返回响应 然后我搜索发现 需要在VS2010中启用async和await 然后通过使用 AsyncCtpLibrary dll 引用 我启用了它 但vs2010仍然没有返回响
  • Python输入错误

    我在 Mac OSX 10 9 5m 上运行 python 2 7 10 但它不起作用 这是代码 YourName py name input What is your name n print Hi name 这是错误 Python 2
  • Uglify 破坏了 npm run build,日志报告没有说明任何特别的内容,npm run dev 可以工作

    这是 npm run build 产生的错误消息 ERROR in build js from UglifyJs Unexpected token punc src App vue 40 0 build js 139 6 npm ERR c
  • 跨线程事件信号(Obj-C)的同步/等待设计?

    在 Cocoa 应用程序中 我有这样的设置 主线程 M 可以向某个后台 生产者 线程 B 提交请求以完成某些工作 例如项目 X 的 计算结果 此后不久 另一个后台线程 C 可能需要计算项 X 的结果 并且需要同步这些结果 线程 C 本身可以