UIImage drawInRect和UIApplication之间的死锁beginBackgroundTask

时间:2014-03-03 18:52:37

标签: ios multithreading grand-central-dispatch deadlock

我的iOS应用程序在主线程上的UIImage drawInRect和后台线程上的UIApplication beginBackgroundTaskWithExpirationHandler之间出现了死锁。在主线程上,堆栈如下所示:

  

0 semaphore_wait_drap

     

1 _dispatch_group_wait_slow

     

2 copyImageBlockSetJPEG

     

3 ImageProviderCopyImageBlockSetCallback

     

4 img_blocks_create

     

5 img_data_lock

     

6 CGSImageDataLock

     

7 ripc_AcquireImage

     

8 ripc_DrawImage

     

9 CGContextDrawImage

     

10 [UIImage drawInRect:blendMode:alpha:]

     

11 [UIImage scaleToSize:interpolationQuality:]

第11帧是缩放图像的类别方法。基本上,开始一个图像绘制上下文,将图像绘制到具有所需大小的0,0的上下文,并从上下文中获取图像。

后台线程上的堆栈如下所示:

  

0 semaphore_wait_trap

     

1 dispatch_semaphore_wait_slow

     

2 _addBackgroundTask

     

3 [UIApplication beginBackgroundTaskWithExpirationHandler:]

这两个相关的东西到底怎么能被同一个锁阻挡?

更新:当发生这种情况时,应用程序有很多线程条件和等待的信号量。在iOS上一次可以激活的活动锁和条件的数量是否有限制?

0 个答案:

没有答案