1

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];
}];
4

1 に答える 1