gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:12:08 25 4
gpt4 key购买 nike

在 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

关于objective-c - 跨线程事件信号(Obj-C)的同步/等待设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com