iOS中的线程锁(线程锁的相关概念)

630 阅读2分钟

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

什么是线程锁

在实际开发中,应该尽量避免资源在线程之间共享,以减少线程间的相互作用。但是总是有多个线程相互干扰的情况(如多个线程访问一个资源),在线程必须交互的情况下,需要保证每次只有一个线程访问这一块资源,线程锁应运而生

线程锁的相关概念及分类

  • 临界区

    一块对公共资源进行访问的代码,并非一种机制或是算法

  • ⾃旋锁

    用于多线程同步的一种锁,线程反复检查锁变量是否可⽤。由于线程在这⼀过程中保持执⾏,因此是⼀种忙等待。⼀旦获取了⾃旋锁,线程会⼀直保持该锁,直⾄显式释放⾃旋锁。 ⾃旋锁避免了进程上下⽂的调度开销,因此对于线程只会阻塞很短时间的场合是有效的

  • 互斥锁

    ⽤于多线程编程中,防⽌两条线程同时对同⼀公共资源(⽐如全局变量)进⾏读写的机制。该⽬的通过将代码切⽚成⼀个⼀个的临界区⽽达成

  • 读写锁

    计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁) 用于解决多线程对公共资源读写问题。读操作可并发重入,写操作是互斥的。 读写锁通常用互斥锁、条件变量、信号量实现

  • 信号量(semaphore

    一种更高级的同步机制,互斥锁可以说是 semaphore 在仅取值0/1时的特例。信号量可以有更多的取值空间,用来实现更加复杂的同步,而不单单是线程间互斥

  • 条件锁

    其实就是条件变量,当进程的某些资源要求不满足时就进入休眠,也就是锁住了。当资源被分配到了,条件锁打开,进程继续运行

线程锁的性能

找到一张关于线程锁性能的图

Snip20211114_4.png