私はいくつかのスレッドを持っていて、すべて正常に機能したら、アクションごとに1度だけmyMergeBlock
メソッドを呼び出す必要があります。後でmyMergeBlock
に電話できるようにしたいので、私はdispatch_once
を使用できません。iOS機能がセッションごとに1回だけ呼び出されるようにする
いくつかの擬似コードは次のようになりますが、まだスレッドセーフではありません。また、
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