ios 队列简单理解

来源:互联网 发布:yii2连接多个数据库 编辑:程序博客网 时间:2024/06/06 02:08


-(IBAction)buttonQueueClick:(id)sender

{

   //创建一个队列queue1

    count =0;

    queue1 =dispatch_queue_create("com.dispatch.writedb",DISPATCH_QUEUE_SERIAL);串行队列

    queue2= dispatch_queue_create("com.dispatch.concurrent",DISPATCH_QUEUE_CONCURRENT);并行队列

   for (int i =0; i <100; i ++ ) {

NSLog(@"i is:%ld",i);

        [selfwriteData];

    }

}


/**

 *  串行队列是先进先出顺序 block代码块谁先进去就先执行谁

 *  如果是 dispatch_async 已经执行完了100writeData block被加入到队列里面一个一个按顺序执行

 *  如果是 dispatch_sync  在同步执行会等待队列执行完毕再执行下一个循环操作

 */

- (void)writeData

{

//串行队列输出

    dispatch_async(queue1, ^{

        NSLog(@"count is %ld",count);

        count++;

    });

//并行行队列输出

    dispatch_async(queue2, ^{

        NSLog(@"count is %ld",count);

        count++;

    });


//主线程打输出 

并行队列同步执行中和串行的输出结果是一样的

//    dispatch_sync(queue1, ^{

//        NSLog(@"count is %ld",count);

//        count++;

//    });

 }


并行队列异步的打印结果:block被分发到多个线程去同时执行

出现这种原因是因为count++还没有执行完毕 block就已经被分发到子线程执行了 所以很多子线打印的结果是一样的



0 0
原创粉丝点击