OC多线程

实现多线程的四种方案

线程安全

场景:多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。

解决方法

  • 互斥锁(同步锁)
@synchronized(锁对象) {
    // 需要锁定的代码
}
复制代码

判断的时候锁对象要存在,如果代码中只有一个地方需要加锁,大多都使用self作为锁对象,这样可以避免单独再创建一个锁对象。

加了互斥做的代码,当新线程访问时,如果发现其他线程正在执行锁定的代码,新线程就会进入休眠。

  • 自旋锁

加了自旋锁,当新线程访问代码时,如果发现有其他线程正在锁定代码,新线程会用死循环的方式,一直等待锁定的代码执行完成。相当于不停尝试执行代码,比较消耗性能。

属性修饰atomic本身就有一把自旋锁。

NSThread、NSOperation、GCD应用

  • NSThread

面向对象,轻量级

  • NSOperation

面向对象,基于GCD的更高层封装,提供的方便操作:最大并发数(GCD可使用信号量控制并发数),队列的暂停 / 继续,取消所有的操作,指定操作间的依赖关系(GCD中可以异步嵌套同步实现)

  • GCD

提供了一些NSOperation不具备的功能:延迟操作(dispatch_after),一次性执行(dispatch_once)与调度组(创建组,给组里添加任务并指明队列,通过notify获取组的完成通知,执行任务完成后操作)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值