iPhone-大中央调度在iPhone 4S上无法正常工作

iPhone-大中央调度在iPhone 4S上无法正常工作,iphone,ios,cocoa-touch,ipad,grand-central-dispatch,Iphone,Ios,Cocoa Touch,Ipad,Grand Central Dispatch,我的这个应用程序是在iPhone4发布时为它创建的。现在,这个应用程序没有在iPhone4S上运行 我已将罪犯部分确定为GCD部分。这是: dispatch_group_t my_group = dispatch_group_create(); dispatch_queue_t queue1 = dispatch_queue_create("Queue 1", NULL); dispatch_queue_t queue2 = dispatch_queue_

我的这个应用程序是在iPhone4发布时为它创建的。现在,这个应用程序没有在iPhone4S上运行

我已将罪犯部分确定为GCD部分。这是:

dispatch_group_t my_group = dispatch_group_create();

dispatch_queue_t queue1 = 
        dispatch_queue_create("Queue 1", NULL);

dispatch_queue_t queue2 = 
        dispatch_queue_create("Queue 2", NULL);


dispatch_group_async(my_group, queue1, ^{
        [self doStuff1];
});

dispatch_group_async(my_group, queue2, ^{
        [self doStuff2];
});

dispatch_group_notify(my_group, dispatch_get_main_queue(), ^{
 // this is block 3, this is to be executed after both queues end processing
 // this is never executed on iPhone 4S, but is executed on iPhone4
 // no error message, but execution never starts inside this block
});
其思想是:创建两个队列和一个组。我使用组异步启动两个队列的任务。当两个任务都完成时,该组触发另一个任务块

这在iPhone4上运行得非常好,但最终的Block3从未达到

有什么原因吗?有什么线索吗


谢谢。

也许
doStuff1
doStuff2
是死锁,或者其他东西阻塞了主线程?4S有多个内核,与4不同,因此可能是您遇到了一些以前从未见过的多线程锁问题


您确定两个块实际上都已完成,并且主线程可用于运行生成的块吗?也许一些完整的代码(即doStuff1和doStuff1的主体)会有所帮助?

我要做的第一件事是更改代码以调度队列1上的所有内容;显然,您不会获得并发性,但如果问题立即消失,您将立即知道dostuff1和dostuff2是否发生冲突。在单核机器上,这可能是您以前实际看到的执行行为。

测试多核理论的一种方法(我猜也是这样)是在iPad2上运行的。线程问题永远无法保证,但它们往往更容易在多核环境下暴露出来。@davidunham-在多核Mac上运行时,我在iOS模拟器中也暴露过类似的错误。这是模拟器可以派上用场的情况之一。您过去也可以使用CPUPalette应用程序在Mac上实时打开和关闭内核,但我现在在Lion系统上找不到它。@BradLarson我的这段代码的问题是我不能使用模拟器,因为它需要coremotion和一些硬件功能。是的,问题可能是多核的问题。我已经删除了并发,它现在可以在4S上运行。