dispatch_sync

dispatch_sync:

Submits a block to a dispatch queue like dispatch_async(), however

dispatch_sync() will not return until the block has finished.

 Calls to dispatch_sync() targeting the current queue will result in dead-lock.

/*!

* @function dispatch_get_global_queue

*

* @abstract

* Returns a well-known global concurrent queue of a given quality of service

* class.

*

* @discussion

* The well-known global concurrent queues may not be modified. Calls to

* dispatch_suspend(), dispatch_resume(), dispatch_set_context(), etc., will

* have no effect when used with queues returned by this function.

*

* @param identifier

* A quality of service class defined in qos_class_t or a priority defined in

* dispatch_queue_priority_t.

*

* It is recommended to use quality of service class values to identify the

* well-known global concurrent queues:

*  - QOS_CLASS_USER_INTERACTIVE

*  - QOS_CLASS_USER_INITIATED

*  - QOS_CLASS_DEFAULT

*  - QOS_CLASS_UTILITY

*  - QOS_CLASS_BACKGROUND

*

* The global concurrent queues may still be identified by their priority,

* which map to the following QOS classes:

*  - DISPATCH_QUEUE_PRIORITY_HIGH:         QOS_CLASS_USER_INITIATED

*  - DISPATCH_QUEUE_PRIORITY_DEFAULT:      QOS_CLASS_DEFAULT

*  - DISPATCH_QUEUE_PRIORITY_LOW:          QOS_CLASS_UTILITY

*  - DISPATCH_QUEUE_PRIORITY_BACKGROUND:   QOS_CLASS_BACKGROUND

*

* @param flags

* Reserved for future use. Passing any value other than zero may result in

* a NULL return value.

*

* @result

* Returns the requested global queue or NULL if the requested global queue

* does not exist.

*/

__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)

DISPATCH_EXPORT DISPATCH_CONST DISPATCH_WARN_RESULT DISPATCH_NOTHROW

dispatch_queue_t

dispatch_get_global_queue(long identifier, unsigned long flags);

时间: 2024-10-29 19:05:43

dispatch_sync的相关文章

GCD多线程-dispatch_async与dispatch_sync的区别

从async和sync的字面上区分,async是异步的简称,sync是同步的简称. 1.dispatch_async意味着异步处理,主程序不会等待block块执行结果. int main(int argc, const char * argv[]) { dispatch_queue_t queueMain = dispatch_get_main_queue(); dispatch_async(queueMain, ^{ NSLog(@"+++++++");}); NSLog(@&quo

完整详解GCD系列(一)dispatch_async;dispatch_sync;dispatch_

为什么要写这个系列,因为百度了一下,找了很多都是些片面的Blog,拷贝来拷贝去的,写的也很粗糙. 所以,我要写这个系列,尽量把官网文档中GCD的强大功能完整的表达出来.方便自己,也方便别人,如果发现有问题,欢迎提出 本教程的计划:在完整的看过GCD的官方文档之后,我实在想不出来如何用一篇文章详细完整的写出来如此多的功能.所以,决定开一个专栏来写这个教程.计划8篇文章,分别介绍各种功能,每种功能会附上简单完整的示例代码.最后 的一篇文章会进行总结,总结出GCD的经典使用场景.源代码只提供Swift

dispatch_sync: 同步,不具备开启线程的能力 dispatch_async:异步,具备开启线程的能力

dispatch_sync: 同步,不具备开启线程的能力 dispatch_async:异步,具备开启线程的能力 并发队列:多个任务可以同时执行 穿行队列:一个任务执行完后,再执行下一个任务. core foundation 和foundation 框架之间的数据转换需要桥接 _bridge   NSstring   CFstring 导航控制器 push 进入到下一个控制器 xib 里面不要放多个对象 ,可能会返回程别的对象    [对象 superview]:可能会出错    xib一般用来

完整详解GCD系列(一)dispatch_async;dispatch_sync;dispatch_async_f;dispatch_sync_f

为什么要写这个系列,因为百度了一下,找了很多都是些片面的Blog,拷贝来拷贝去的,写的也很粗糙. 所以,我要写这个系列,尽量把官网文档中GCD的强大功能完整的表达出来.方便自己,也方便别人,如果发现有问题,欢迎提出 本教程的计划:在完整的看过GCD的官方文档之后,我实在想不出来如何用一篇文章详细完整的写出来如此多的功能. 所以,决定开一个专栏来写这个教程.计划8篇文章,分别介绍各种功能,每种功能会附上简单完整的示例代码.最后 的一篇文章会进行总结,总结出GCD的经典使用场景.源代码只提供Swif

dispatch_sync添加到viewDidLoad卡死问题理解

- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"1"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"2"); }); NSLog(@"3"); } 上面的代码只会打印1 然会就会线程卡死,这是为什么呢? 因为dispatch_get_main_queue()得到的是一个串行队列,串行队列的特点: 一次只调度一个任务,队列中的任务一个

iOS dispatch_sync(dispatch_get_main_queue(), ^{ });死锁原因

1: - (void)viewDidLoad { //dispatch_sync(dispatch_get_main_queue(), ^{ //NSLog(@"3"); //死锁原因 //1:dispatch_sync在等待block语句执行完成,而block语句需要在主线程里执行,所以dispatch_sync如果在主线程调用就会造成死锁 //2:dispatch_sync是同步的,本身就会阻塞当前线程,也即主线程.而又往主线程里塞进去一个block,所以就会发生死锁. //});

dispatch_sync和dispatch_async的区别

dispatch_sync 线程同步.dispatch_async线程异步 //同步 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@"dispatch_sync - 1"); }); dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@&q

dispatch_sync:As an optimization, this function invokes the block on the current thread when possible

两件事情: 1.是否是一个线程: 2.queue task 的目标线程是否有未完成的task. 模型:一个线程处理当前的task还有通过gc d派发来的待执行task. 猜测: 如果目标thread上除了当前task,没有其它的task,派发到thread task 可以 优化为直接执行. 如果有其它待执行task,则会导致死锁. 原文地址:https://www.cnblogs.com/feng9exe/p/9175227.html

GCD的常用代码块

一.队列 1.获取全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 2.创建一个串行队列 dispatch_queue_t queue = dispatch_queue_create("queueName", NULL); 3.获取主队列 dispatch_queue_t queue = dispatch_get_main_queue(); 二.