在 Cocoa 应用程序中,我有这样的设置:
- 主线程 (M) 可以向某个后台“生产者”线程 (B) 提交请求以完成某些工作,例如项目 X 的计算结果。
- 此后不久,另一个后台线程 (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(使用前将#替换为@)