多线程、锁、队列

信号量

1
2
3
①dispatch_semaphore_t sem = dispatch_semaphore_create(0);
②dispatch_semaphore_signal(sem);
③dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

GCD

1
2
3
4
5
6
7
①dispatch_group_t group = dispatch_group_create();
②dispatch_group_enter(group);
③dispatch_group_leave(group);
④dispatch_group_notify(group, dispatch_get_main_queue(), ^{
这里跑去干自己的事情。。。。
});
>

用信号量时候,

某个线程锁住后,就处于等待状态,即该线程也就无法再继续操作,所以试图尝试在该线程锁住的时候去发送信号,增加信号量,会造成死锁。

举例:

信号量使用场景

任务

iOS 实现并发和串行任务
串行队列如何知道任务已经完成
iOS开发中的并发、串行队列,同步、异步任务

iOS代码同步到主线程的三种方法

autoreleasepool 使用场景、什么时候释放

临时变量什么时候释放

RunLoop和线程间的关系

每条线程都有唯一的一个与之对应的RunLoop对象,RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value,主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建,RunLoop在第一次获取时创建,在线程结束时销毁。

1
2