Obj-C でロックがどのように機能するか、本当に混乱しています。
同時に一度だけ呼び出したいネットワーク要求があります。データを受信するまで、他のすべての呼び出しをブロックしたいと思います。
Mylock
は型NSCondition
で static で、_sending
単なる bool です。これが私の実装です。はいくつかのアクションネットワークリクエストを実行するためにgetWithSuccess
使用AFNetworking
しているため、複数のスレッドを開始したり、GDC でいくつかの魔法を使用したりできると思います。
私の問題は、この実装ではデッドロックが発生することです。正しい実装がどのように機能するかについてのヒントが必要です。
[lock lock];
while (_sending)
[lock wait];
_sending = YES;
[self getWithSuccess:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
_sending = NO;
[lock signal];
[lock unlock];
} fail:^() {
_sending = NO;
[lock signal];
[lock unlock];
}];