-(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);
[self writeData];
}
}
/**
* 串行队列是先进先出顺序 block代码块谁先进去就先执行谁
* 如果是 dispatch_async 已经执行完了100次writeData 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就已经被分发到子线程执行了 所以很多子线打印的结果是一样的