方法 1:
- (void) method1
{
[_condition lock];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{
//Fetach data from remote, when finished call method2
[self fetchData];
});
[_condition waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:30.0]];
// Do something.
[_condition unlock];
}
方法 2:
- (void) method2
{
[_condition lock];
[_condition signal];
[_condition unlock];
}
Thread 1が method1 にある場合、実行すること[_condition waitUtilDate ...];
でロックが解除されます。 スレッド 2 はこの領域に入り、さらに を実行して条件を待ち[_condition waitUtilDate ...]
ます。
スレッド 1とスレッド 2の両方がブロック ( request 1 request 2 ) をキューに入れ、リモートから同じデータを取得しました。リクエスト 1が終了すると、メソッド 2 を呼び出して _condition を通知します。
私の質問は次のとおりです。
- Thread 1とThread 2のどちらが通知されますか?
- リクエスト 1とリクエスト 2は同じことを行っているため、両方のスレッド ( ) にシグナルを送って、リクエスト 1が終了したときにリクエスト2
broadcast
をキャンセルできます。ただし、より良い方法は、リクエスト 1が送信された後、スレッド 2がクリティカル エリアに入るの を拒否することです。しかし、クリティカルエリアに入る前に2回ロックすることはできませんでした. それで、なにかお手伝いできますか?
ありがとう。