【发布时间】:2012-03-15 23:42:24
【问题描述】:
我有几个线程,一旦它们都完成工作,我需要在每个操作中只调用一次myMergeBlock 方法。我不能使用dispatch_once,因为我希望以后能够调用myMergeBlock。
一些伪代码看起来像这样,但还不是线程安全的:
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();
}
另外,根据调用工人的方式,我不直接调用它们,而是将它们作为参数传递给函数。
【问题讨论】:
-
为什么上面的方法不起作用?我觉得还可以。
标签: ios multithreading thread-safety grand-central-dispatch