跨线程事件信号(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)的同步/等待设计? 的相关文章

  • 在 Xamarin 中读取 iOS 的相机权限

    我有一个用 Xamarin 开发的 iOS 应用程序 当应用程序没有访问麦克风的权限时 如果用户尝试从应用程序访问麦克风 我会使用以下命令检查设置AVAudioSession SharedInstance RequestRecordPerm
  • 快速以编程方式打开 viewController

    我想通过代码在按钮上打开新的 UIViewController 我已经在故事板中制作了控制器 只想链接它 而且我不想使用 XIB 接口或 nibName 要打开新视图控制器 您需要在按钮单击事件中写入以下行 self performSegu
  • 应用程序关闭时下载报刊亭应用程序

    我正在实现一个报摊杂志应用程序 它通过 Urban Airship 推送通知接收新期刊 只要应用程序位于前台或后台 这就可以正常工作 但据我所知 当应用程序完全关闭时也应该触发下载 但发送推送 content available 1如果我的
  • AUGraph 在 iOS 上是否已被弃用?如果是的话,什么时候?

    我听到过这样的传言AUGraph在 iOS 上已被弃用 例如这篇推特帖子 https twitter com marcoarment status 878323409339338753 marcoarment 您对 atpfm 关于需要重写
  • 如何让node.js中的线程休眠而不影响其他线程?

    As per 了解 Node js 事件循环 http blog mixu net 2011 02 01 understanding the node js event loop node js支持单线程模型 这意味着如果我向 Node j
  • 在 Swift 2.0 中以横向模式使用 UIImagePickerController

    我正在编写一个仅限 LandScape 的 iPad 应用程序 我需要从库中拍照以发送数据库 但图像上传屏幕仅适用于纵向模式 如何将其更改为横向模式 我读过一些关于 UIPickerControllerDelegate 不支持横向模式的内容
  • 辅助功能:ScrollView 自动滚动到点击“TAB”时不可见的视图

    有人可以让我知道当仅使用键盘的用户尝试使用 Tab 键在 ScrollView 中的不同 UI 元素之间导航时如何自动滚动滚动视图吗 当我按 TAB 键时 焦点会转移到滚动视图中存在的不同 UI 元素 但如果可见内容视图中不存在 UI 元素
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • WKWebView 中的调整大小处理程序中的 window.innerWidth/Height 未更新

    我有一些全屏网页内容 当窗口使用调整大小事件更改大小时 我会更新这些内容 window onresize function var width window innerWidth var height window innerHeight
  • flutter:如果禁用应用程序委托调配,则 UIApplicationDelegate 收到的远程通知需要转发到 FIRAuth

    当我想在 firebase 中使用短信验证时 该应用程序仅在 iOS 上失败 APN 证书已在 firebase 上配置并且FirebaseAppDelegateProxyEnabled是 NOInfo plist 在 verifyPhon
  • 在后台线程上搜索

    我试图在 iPhone 应用程序中搜索数千个对象 但是搜索严重滞后 每次击键后 UI 都会冻结 1 2 秒 为了防止这种情况 我必须在后台线程上执行搜索 我想知道是否有人有一些在后台线程上搜索的提示 我读了一点NSOperation并在网上
  • 重新安装我的 iPad 应用程序时,ApplicationIconBadgeNumber 未重置。

    我正在使用以下代码设置我的 applicationIconBadgeNumber UIApplication sharedApplication setApplicationIconBadgeNumber theIntToDisplay 问
  • java:为什么主线程等待子线程完成

    我有一个简单的java程序 主线程 main 创建并启动另一个线程t class T extends Thread Override public void run while true System out println Inside
  • 让线程在窗体关闭时保持运行

    我在我的应用程序上创建了一个同步线程 我想知道如果我关闭申请表 是否有办法让该线程保持打开状态 直到完成同步过程 调用线程的WaitFor方法在您的 DPR 文件中 之后Application Run线 如果线程已经运行完毕 那么WaitF
  • searchDisplayController 在 iOS 8 中已弃用

    如何更正以下内容以免出现警告 我缺少什么 修正时searchResultsController to searchController它给了我一个错误 找不到对象 if tableView self searchDisplayControl
  • 如何处理 iPhone 6S Plus 字体大小?

    与其他屏幕尺寸相比 iPhone 6S Plus 的屏幕非常大 我似乎无法找到一种在不以编程方式调整大小的情况下处理标签字体大小的好方法 如何调整标签的字体大小 使其在 iPhone 5 上看起来更小 在 iPhone 6 Plus 上看起
  • TestFlight Beta 中的消息不可用

    I am seeing Unavailable message in TestFLight Beta App in iOS8 Please find the attached screenshot please tell me how to
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow

随机推荐

  • 在 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 本身可以