在Cocoa程序,我有这样的设置:跨线程事件信号(Obj-C)的同步/等待设计?
- 主线程(M),可以提交请求到一些背景“生产者”线程(B)得到一些工作做,说的结果对项目X的计算。
- 此后不久,不同的后台线程(C)可能需要计算项目X的结果,并且需要同步这些结果。
线程C可以重新同步自己的工作,但是如果线程B恰好在计算项X的中间,我想要线程C阻塞并从B获得结果。结果的计算可以在磁盘上找到,所以数据传递不是问题。
什么是阻塞线程C的最佳方式,直到线程B完成项目X?
请注意,那里的项目B进程是任意的 - X只是本示例中许多项目之一。我想阻止,直到具体的项目X完成。
因此,从概念上讲,我想要的是当线程B开始说“我正在处理X”时,线程B设置某种标志的方式,如果C进来并看到该标志,它将等待标志清除,然后得到结果。
不知道我是否可以以某种方式将NSLocks拉进这个角色,或者如果在操作系统中有一个更好的基元。
任何想法(或潜在的重构问题)欢迎!谢谢。
谢谢。这可能是最好的答案,尽管我最终会做更像下面这样的事情,因为'-waitUntilFinished'是一个只有4.x的方法。 – 2010-11-05 00:50:38