随笔分类 - 多线程
NSThread GCD NSOperation
摘要:iOS 的多读单写指的是多个线程可以同时读取共享的数据,但是只有一个线程能够写入数据。这是为了保证数据的一致性和避免竞争条件的出现。 一 在 Objective-C 中,可以使用 GCD 的并发队列来实现多读单写。具体实现步骤如下: 1.定义一个并发队列和一个串行队列,用于处理读操作和写操作,分别为
阅读全文
摘要:同步 异步 表示开辟新线程的能力 异步 可以开辟新线程同步 不可以 串行并行 表示队列调度任务的能力 串行 前一个任务执行完毕才能调度下一个任务并行 前一个任务一旦执行,就可以调度下一个任务 异步 + 串行 可以开辟新线程,但是任务只能一个一个取,所以没必要开辟新线程 结果:单线程 异步 + 并行
阅读全文
摘要:死锁发生的条件 互斥条件:就是一个资源只能有一个进程占有,不可以被两个或者多个进程占有 不可剥夺条件:进程已经获得的资源在未使用完之前,不可以被抢占,只能在使用完之后自己释放 请求与保持条件:进程自己已经至少保持一个资源,又请求其他资源,但是这个资源被其他进程占有,而且又不释放自己已经占有的资源 环
阅读全文
摘要:信号量:dispatch_semaphore_t 互斥锁:pthread_mutex、@ synchronized、NSLock 条件锁:NSConditionLock 、NSCondition、 递归锁:NSRecursiveLock 自旋锁:OSSpinLock(不安全,已遗弃,会出现优先级反转
阅读全文
摘要:1. NSOperation、NSOperationQueue 简介 NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。实际上 NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单
阅读全文
摘要:1. dispatch_after 该函数用于任务延时执行,其中参数dispatch_time_t代表延时时长,dispatch_queue_t代表使用哪个队列。如果队列为主队列,那么任务在主线程执行,如果队列为全局队列或者自己创建的队列,那么任务在子线程执行,代码如下: dispatch_afte
阅读全文