在Cocoa应用程序中,我有如下设置:
1.主线程(M)可以向某个后台“生产者”线程(B)提交请求,以完成一些工作,例如对项目X进行计算的结果。
2.稍后,不同的后台线程(C)可能希望同步获得计算项目X的结果。
3.如果线程B正在计算项目X,则线程C可以自己同步地重新执行该工作,但如果B在线程X上已经在处理过程中,我希望线程C能够阻塞并从B获取结果。计算的结果可以在磁盘上找到,因此数据传递不是问题。
那么,如何最好地阻止线程C,直到线程B完成项目X呢?
需要注意的是,B处理的项目是任意的--X只是此示例中的一个项目。我希望阻塞线程,直到特定项目X完成。
所以,在概念上,我想要一种方法,让线程B在开始时设置一些标志,表明“我正在处理X”,如果C进来并看到该标志,则等待该标志被清除,然后获得结果。
不确定是否可以将NSLocks硬塞到这个角色中,或者操作系统中是否有更好的原语。
欢迎任何想法(或可能重构问题)!谢谢。
1.主线程(M)可以向某个后台“生产者”线程(B)提交请求,以完成一些工作,例如对项目X进行计算的结果。
2.稍后,不同的后台线程(C)可能希望同步获得计算项目X的结果。
3.如果线程B正在计算项目X,则线程C可以自己同步地重新执行该工作,但如果B在线程X上已经在处理过程中,我希望线程C能够阻塞并从B获取结果。计算的结果可以在磁盘上找到,因此数据传递不是问题。
那么,如何最好地阻止线程C,直到线程B完成项目X呢?
需要注意的是,B处理的项目是任意的--X只是此示例中的一个项目。我希望阻塞线程,直到特定项目X完成。
所以,在概念上,我想要一种方法,让线程B在开始时设置一些标志,表明“我正在处理X”,如果C进来并看到该标志,则等待该标志被清除,然后获得结果。
不确定是否可以将NSLocks硬塞到这个角色中,或者操作系统中是否有更好的原语。
欢迎任何想法(或可能重构问题)!谢谢。
-waitUntilFinished
是一个仅限于4.x版本的方法。 - Ben Zotto