Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios dispatch\u sync永远不会从块返回_Ios_Grand Central Dispatch_Objective C Blocks - Fatal编程技术网

Ios dispatch\u sync永远不会从块返回

Ios dispatch\u sync永远不会从块返回,ios,grand-central-dispatch,objective-c-blocks,Ios,Grand Central Dispatch,Objective C Blocks,您好,我有以下代码,我的问题是有时它永远不会出现在dispatch\u sync块死锁的情况下。我一直在寻找它,但没有一个解决办法奏效。有谁能帮忙找出原因并解决这个问题吗 connectionQueue = dispatch_queue_create("YapDatabaseConnection", NULL); dispatch_sync(connectionQueue, ^{ @autoreleasepool { NSLog(@"read block_sync :start

您好,我有以下代码,我的问题是有时它永远不会出现在
dispatch\u sync
块死锁的情况下。我一直在寻找它,但没有一个解决办法奏效。有谁能帮忙找出原因并解决这个问题吗

connectionQueue = dispatch_queue_create("YapDatabaseConnection", NULL);

dispatch_sync(connectionQueue, ^{ @autoreleasepool {
        NSLog(@"read block_sync :started");
        if (longLivedReadTransaction)
        {
      NSLog(@"read block_sync :started1 %@",longLivedReadTransaction);
            block(longLivedReadTransaction);
        }
        else
        {

            YapDatabaseReadTransaction *transaction = [self newReadTransaction];
        NSLog(@"read block_sync :started2 %@",transaction);
            [self preReadTransaction:transaction];
      NSLog(@"read block_sync :1 %@",transaction);
            block(transaction);
      NSLog(@"read block_sync :2 %@",transaction);
            [self postReadTransaction:transaction];
      NSLog(@"read block_sync :3 %@",transaction);
        }
    }});

假设您在主队列上运行此代码,则代码中对主队列的任何回调都将导致死锁Yes YapDatabase仅在主线程上运行,并且不会每次都发生。我认为您应该检查所有线程的堆栈跟踪。您应该提供更多代码。例如,区块中使用了哪些队列?我知道这是一个老问题,但不用说,使用
dispatch\u sync
很少是个好主意。您正在阻止进行此调用的线程并引发死锁。但是如果没有你的帮助,我们将无法帮助你。