繁体   English   中英

尝试访问元数据时并发ALAsetsLibrary迭代死锁

[英]Concurrent ALAssetsLibrary iteration deadlock when trying to access metadata

当尝试遍历图像资产时,虽然并行化对元数据的访问非常耗时,但这可能是一个有趣的想法。 结果是多线程陷入某种僵局。 码:

[_assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupLibrary usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    if (group) {
        [group setAssetsFilter:[ALAssetsFilter allPhotos]];
        [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                if (asset) {
                    NSLog(@"%d", index);
                    id s = asset.defaultRepresentation.metadata; // <----- This is the troublemaker
                }
            });
        }];
    }
} failureBlock:nil];

有些任务已完成,但其他任务却卡住了。 当我暂停执行并检查线程时,我发现[ALAssetRepresentation metadata]正在等待多个线程上的信号量信号。

其他时间(当我删除NSLog )所有任务都卡住了。

有任何想法吗?

我猜它超出了范围。 我认为主要的罪魁祸首是资产库本身在两者之间超出范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM