并发线程,耗时不同,顺序结束

问题:有1000个线程,顺序编号,并发执行,每一个线程的耗时不同。要求最后线程顺序结束。

ps:比如有5个线程,编号12345,每一个线程最后结束时输出编号,并发执行,1耗时10秒,2耗时4秒,3耗时6秒,4耗时1秒,5耗时2秒。245耗时很少,很快完成,但是必须等待1结束输出之后,2才能结束,提前完成了也要等待1的完成。依次类推。

首先会想到NSOperation的依赖dependency,以及GCD的信号量semaphore。
但是他们的作用都是一个线程要等另一个线程结束后才开始,而非问题中的,线程同时开始,只有结束时等待,所以不适用。

然后进一步想,问题中的并发,线程同时开始,本质和平常使用的没有区别,真正问题在于每一个线程本身的真实工作做完将要结束时,这时要检查顺序的上一个线程是否完成。


//Thread works is over, need finish
while (!lastThread.isFinish) {
  //wait lastThread finish
}
self.isFinish = YES;

通过查看api,只有NSOperation有可能实现。
通过继承NSOperation,重写start方法,自己控制状态。

你可能感兴趣的:(并发线程,耗时不同,顺序结束)