GCD API 总结(原创)

Dispatch Queue即 执行处理的等待队列。

存在两种Dispatch Queue,即

Serial Dispatch Queue 等待现在的处理

Concurrent Dispatch Queue 不等待现在的处理

1.dispatch_queue_create("com.gcd.test",Null)

创建Dispatch queue,

DISPATCH_QUEUE_SERIAL

DISPATCH_QUEUE_CONCURRENT

- (void)tsGCD

{

dispatch_queue_t queue = dispatch_queue_create("com.gcd.test", DISPATCH_QUEUE_CONCURRENT);

NSMutableArray *array = [[NSMutableArray alloc]init];

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

dispatch_async(queue, ^{

[array addObject:[NSNumber numberWithInt:i]];

});

}

NSLog(@"done");

}

当为DISPATCH_QUEUE_CONCURRENT,数组AddObject非线程安全,同时访问容易引起问题,

gcdTest(2484,0x11395b000) malloc: *** error for object 0x7f9c8b802e00: pointer being freed was not allocated

*** set a breakpoint in malloc_error_break to debug

当为DISPATCH_QUEUE_SERIAL时,线程有序进行,不会引起并发问题。

时间: 2024-10-25 16:00:56

GCD API 总结(原创)的相关文章

GCD API 理解 (一)

资料先行 GCD 深入理解:第一部分 GCD 深入理解:第二部分 以上两篇文章是关于GCD讲的比较好的文章,翻译自raywenderlich,该网站有很多关于iOS 开发的优秀文章. 引子 iOS 开发中有三大进阶性的技术点,分别是GCD.runtime 和runloop.其中GCD用的最多,runtime也有不少使用场景,runloop在系统的API里体现的比较多,项目里实际使用比较少. 一直都想就这三个技术点做一些总结,没事的时候可以回来复习巩固一下,可是记录了很多要写的点,但是文章却是一拖

五个案例让你明白GCD死锁

五个案例让你明白GCD死锁 作者:brighttj(@saitjr 网址:http://www.brighttj.com/ios/ios-gcd-deadlock.html 死锁一直都是在使用多线程时,需要注意的一个问题.以前对同步.异步,串行.并行只有一个模糊的概念,想想也是时候整理一下了.再看看之前的博客,已经很久没有干货了[说得好像之前有干货一样],所以,这篇博客,我尽最大努力,也借鉴了很多其他博客中的例子,来讲解GCD死锁问题. 环境信息: Mac OS X 10.10.5 Xcode

iOS/MacOS多线程编程GCD

GCD和Block一起,使得iOS多线程编程变得简单优雅许多.如此优雅简单的多线程API真希望C和C++标准中也会有 One of the technologies for starting tasks asynchronously is Grand Central Dispatch (GCD). This technology takes the thread management code you would normally write in your own applications a

细讲GCD 给自己留着看

Skip to content PersonalOpen sourceBusinessExplore Sign upSign in PricingBlogSupport This repository Watch77 Star743 Fork196 ming1016/study CodeIssues 2Pull requests 0WikiPulseGraphs 细说GCD(Grand Central Dispatch)如何用 ming1016 edited this page on 18 Ja

GCD死锁

串行与并行 在使用GCD的时候,我们会把需要处理的任务放到Block中,然后将任务追加到相应的队列里面,这个队列,叫做Dispatch Queue.然而,存在于两种Dispatch Queue,一种是要等待上一个执行完,再执行下一个的Serial Dispatch Queue,这叫做串行队列:另一种,则是不需要上一个执行完,就能执行下一个的Concurrent Dispatch Queue,叫做并行队列.这两种,均遵循FIFO原则. 举一个简单的例子,在三个任务中输出1.2.3,串行队列输出是有

Objective-C中GCD

同步 异步 并行 串行 任务组 时间等待 Dispatch Queue有两种: 1.Serial Dispatch Queue,串行Queue,按队列顺序每次只能执行一个该线程中追加的任务(可通过创建多个串行queue实现并行执行任务(会降低性能)) 串行queue可解决多个线程更新相同资源导致数据竞争的问题,让操作该资源的任务放在同一个串行queue中执行即可 2.Concurrent Dispatch Queue,并行Queue,该线程中追加的任务可同时执行 获取Dispatch Queue

GCD的一些测试和总结

1-创建.获取队列 主要测试 1.dispatch_queue_create 2.dispatch_sync 3.dispatch_async 4.dispatch_get_main_queue 5.dispatch_get_global_queue // // ViewController.m // GCDDemo // // Created by gongzixiaobai on 16/3/19. // Copyright ? 2016年 公子小白. All rights reserved.

从NSTimer的失效性谈起(二):关于GCD Timer和libdispatch

一.GCD Timer的创建和安放 尽管GCD Timer并不依赖于NSRunLoop,可是有没有可能在某种情况下,GCD Timer也失效了?就好比一開始我们也不知道NSTimer相应着一个runloop的某种mode. 先来看看GCD Timer的用法: dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, aQueue); dispatch_source_set_timer(ti

GCD 多线程技术

Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用 的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,DCD就能生成 必要的线程并计划执行任务.由于线程管理是作为系统的一部分来实现的,因此可以统一管理,也可以执行任务, 这样就比以前的线程更有效率. GCD API 1. Dispatch Queue 队列 队列有两种类型: Serial Dispatch Queue 串行队列,使用一个线程