美文网首页
iOS中同步与锁的知识

iOS中同步与锁的知识

作者: 蔡锐蔡老师 | 来源:发表于2020-05-10 20:12 被阅读0次

所谓同步,就是指一个线程访问数据未结束的时候,其他线程不得对同一数据进行访问。

同步的手段包括4种

1)信号量:对于允许多个线程并发访问的资源,多元信号量是一个不错的选择,多元信号量简称信号量

2)互斥量:必须是哪一个线程获取这个锁,哪一个线程就要释放这个锁,其他线程释放这个锁无效

3)临界区:临界区具有和互斥量相同的性质,但作用范围仅限于本进程

4)条件变量:可以让许多线程一起等待某个事件的发生,当事件发生时,所有线程可以一起恢复执行

同步最常见的方法是锁,锁包括

1)自旋锁:线程等待锁时不会被挂起,降低线程切换的成本,适用于阻塞很短时间的case,但存在优先级反转的问题(低优先级线程获取锁,高优先级线程等待锁,导致低优先级线程无法释放锁)

代表:OSSpinLock

2)互斥锁:最常用的一种锁,线程等待锁时会被挂起,会有线程切换的成本

代表:①os_unfair_lock;②pthread_mutex,PTHREAD_MUTEX_DEFAULT;③NSLock,是②的封装

3)信号量:一般情况下我们不会使用信号量做锁的操作,大部分应用场景是将一个异步的操作变成一个同步的操作比如AFN内部的实现

代表:dispatch_semaphore

4)读写锁:是一个特定场景的同步(读取频繁,仅仅偶尔写入),一个读写锁同时只能有一个写者或者多个读者,但不能同时既有读者又有写者,有两种获取读写锁的方式,共享或者独占,行为如下

读写锁的行为

代表:①pthread_rwlock;②dispatch_barrier_async / dispatch_barrier_sync

5)条件锁:根据条件的满足进行加锁和解锁的操作

代表:①pthread_mutex,condition;②NSCondition,对①的封装;③NSConditionLock,对于②封装

6)递归锁:可以多次加锁,不会死锁

代表:①@synchronized,是标准的递归锁;②pthread_mutex,PTHREAD_MUTEX_RECURSIVE;③NSRecursiveLock,对于②的封装

7)分布锁:基于文件方式的锁机制,可以跨进程访问

代表:NSDistributedLock(只在macOS上可用)

相关文章

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • iOS中同步与锁的知识

    所谓同步,就是指一个线程访问数据未结束的时候,其他线程不得对同一数据进行访问。 同步的手段包括4种 1)信号量:对...

  • 起底多线程同步锁(iOS)

    起底多线程同步锁(iOS) 起底多线程同步锁(iOS)

  • 多线程

    ios中为我们提供了GCD、NSOpration、NSThread 一、GCD多线程与锁GCD 同步异步、串行、并...

  • iOS中的锁

    可以看这篇文章:iOS 常见知识点(三):Lock 什么是锁 锁是一种同步机制,用于在存在多线程的环境中实施对资源...

  • 线程锁

    探讨iOS开发中各种锁使用NSCondition实现多线程同步 NSCondition是线程同步, 阻塞线程。 取...

  • java基础之同步锁初解

    同步锁作用 -----java中的同步锁是个比较重要的知识点,我们知道,通过synchronized(对象A)可以...

  • iOS开发之路---我的6月面试总结

    第一部分:基础知识 1.oc中的各种锁。为什么有效率高低之分? 锁是线程编程同步工具的基础。iOS开发中常用的锁有...

  • iOS中的锁

    锁是一种同步机制,用于多线程环境中对资源访问的限制iOS中常见锁的性能对比图(摘自:ibireme): iOS锁的...

  • iOS 并发,锁,线程同步【二】Operation

    在之前的一篇文章中【iOS 并发,锁,线程同步【一】GCD】,我们讨论了一下 GCD 的并发,锁和线程同步的问题,...

网友评论

      本文标题:iOS中同步与锁的知识

      本文链接:https://www.haomeiwen.com/subject/tqlsnhtx.html