我有幾個線程,一旦它們全部完成工作,我需要每次操作調用一次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