1

iOSで同時実行プログラミングのトピックを学習しています。複数のシリアル ディスパッチ キューのサンプル アプリケーションを作成しました。

-(IBAction)SerialDispatchAction:(id)sender
{
    s1queue = dispatch_queue_create( "com.newtok.firstQueue"  ,  NULL);
    s2queue = dispatch_queue_create( "com.newtok.secondQueue" ,  NULL);
    dispatch_async(s1queue, ^{
        int i=0;
        while(i<5)
        {
            printf("First Asynchronous Dispatch Queue.....\n"); 
            sleep(1);
            i++;
        }       
    });         
       dispatch_async(s2queue, ^{
        int i=0;
        while(i<5)
        {
            printf("Second Asynchronous Dispatch Queue.....\n"); 
            sleep(1);
            i++;
        }       
    });    
    dispatch_sync(s1queue ,^{
        int i=0;
        while(i<5)
        {
            printf("First Synchronous Dispatch Queue.....\n");
            sleep(1);            
            i++;
        }        
    });   
    dispatch_sync(s2queue ,^{
        int i=0;
        while(i<5)
        {
            printf("Second Synchronous Dispatch Queue.....\n");
            sleep(1);
            i++;
        }        
    });    

}

複数のディスパッチシリアルキューを作成している場合、キューは同時に実行されています。私はこのように出力を得ました....

First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Asynchronous Dispatch Queue.....
Second Asynchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
First Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....
Second Synchronous Dispatch Queue.....

dispatch_async と dispatch_sync の違いは何ですか? それはどのようにお互いを浸しますか?

4

3 に答える 3

1

dispatch_sync完了するまでスレッドをブロックし、dispatch_asyncブロックを送信して同時に実行します。GCD の Apple ドキュメントとこの記事を読み直すことをお勧めします。

于 2012-02-09T06:58:54.950 に答える
1

dispatch_sync() はブロックし、キューにあるすべてのアイテムの実行が終了してから戻るようにします。dispatch_async() は単にブロックを送信し、すぐに戻ります。ブロックが同時に実行されるか順次実行されるかは、作業を送信したキューの種類によって異なります。正しく推測したように、複数のシリアル キューは互いに同時に実行されます (同時キューの場合のように、キューの個々のブロックが同時に実行されるのとは対照的です)。

于 2012-02-10T03:56:38.847 に答える