GCD

2023-01-30  本文已影响0人  e521
1、什么是gcd?

2、线程和队列的关系?

3、队列有几种?

4、iOS多线程的方案有哪些?

5、举例说明线程的死锁问题

    dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);

    dispatch_async(queue, ^{
        NSLog(@"1");
        dispatch_sync(queue, ^{
            NSLog(@"2");
        });
        NSLog(@"3");
    });
死锁逻辑

6、常用的GCD方法及使用环境

dispatch_sync(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
//  创建信号量 value可控制并发数量
dispatch_semaphore_create(<#intptr_t value#>)
// 信号量-1
dispatch_semaphore_wait(<#dispatch_semaphore_t  _Nonnull dsema#>, <#dispatch_time_t timeout#>)
// 信号量 +1
dispatch_semaphore_signal(<#dispatch_semaphore_t  _Nonnull dsema#>)
dispatch_barrier_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
// 创建线程组 
dispatch_group_create()
// 线程组异步执行
dispatch_group_async(<#dispatch_group_t  _Nonnull group#>, <#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
// 线程组所有函数执行完毕之后将会调用该函数
dispatch_group_notify(<#dispatch_group_t  _Nonnull group#>, <#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
//进组和出组函数 成对出现 可使用这俩函数建立任务之间的依赖关系
dispatch_group_enter(<#dispatch_group_t  _Nonnull group#>)
dispatch_group_leave(<#dispatch_group_t  _Nonnull group#>)
dispatch_after(<#dispatch_time_t when#>, <#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
dispatch_once(<#dispatch_once_t * _Nonnull predicate#>, <#^(void)block#>)
// 创建
dispatch_source_create(<#dispatch_source_type_t  _Nonnull type#>, <#uintptr_t handle#>, <#uintptr_t mask#>, <#dispatch_queue_t  _Nullable queue#>)
// 回调函数
dispatch_source_set_event_handler(<#dispatch_source_t  _Nonnull source#>, <#^(void)handler#>)
上一篇 下一篇

猜你喜欢

热点阅读