我有几个线程,一旦它们全部完成工作,我需要每次操作调用一次myMergeBlock
方法。我不能使用dispatch_once
,因为我希望能够在以后拨打myMergeBlock
。iOS确保函数仅在每个会话中调用一次
一些伪代码看起来是这样,但还没有线程安全:
BOOL worker1Finished, worker2Finished, worker3Finished;
void (^mergeBlock)(void) = ^{
if (worker1Finished && worker2Finished && worker3Finished)
dispatch_async(queue, myMergeBlock); // Must dispatch this only once
}
void (^worker1)(void) = ^{
...
worker1Finished = YES;
mergeBlock();
}
void (^worker2)(void) = ^{
...
worker2Finished = YES;
mergeBlock();
}
void (^worker3)(void) = ^{
...
worker3Finished = YES;
mergeBlock();
}
此外,根据工人的调用方式,我不直接给他们打电话,而是将它们传递到一个功能参数。
为什么没有上述工作?对我来说似乎没问题。 – CodaFi 2012-03-16 00:13:35