概览

1,什么是锁(临界区)?

2,常用的锁有哪些?

3,相关链接

什么是锁(临界区)

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

常用的锁有哪些?

互斥锁:是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区而达成。

NSLock;pthread_mutex;@synchronized

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

OSSpinLock;os_unfair_lock

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

pthread_rwlock

递归锁:递归锁有一个特点,就是同一个线程可以加锁N次而不会引发死锁。

NSRecursiveLock;pthread_mutex(recursive)

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

NSCondition;NSConditionLock;

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

dispatch_semaphore;

相关链接

https://blog.csdn.net/Deft_MKJing/article/details/79513500

https://www.jianshu.com/p/938d68ed832c

转载于:https://www.cnblogs.com/Lanht/p/10167609.html

iOS开发线程同步技术-锁相关推荐

  1. Linux多线程开发-线程同步-互斥锁pthread_mutex_t

    1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...

  2. Java核心(三)并发中的线程同步与锁

    2019独角兽企业重金招聘Python工程师标准>>> 乐观锁.悲观锁.公平锁.自旋锁.偏向锁.轻量级锁.重量级锁.锁膨胀...难理解?不存的!来,话不多说,带你飙车. 上一篇介绍了 ...

  3. .Net线程同步技术解读

    C#开发者(面试者)都会遇到lock(Monitor),Mutex,Semaphore,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 什么是线程安 ...

  4. Java 多线程和并发编程:(二)线程同步 Lock 锁

    线程同步 Lock 锁 1.Lock 锁 2.步骤 3.Lock 与 synchronized 的区别 1.Lock 锁 Lock 锁:对需要上锁的地方上锁 JDK1.5 后新增的功能 与 Synch ...

  5. 线程同步----递归锁

    概述 最常见的进程/线程的同步方法有互斥锁(或称互斥量Mutex),读写锁(rdlock),条件变量(cond),信号量(Semophore)等.在Windows系统中,临界区(Critical Se ...

  6. 转:C# 线程同步技术 Monitor 和Lock

    原文地址:http://www.cnblogs.com/lxblog/archive/2013/03/07/2947182.html 今天我们总结一下 C#线程同步 中的 Monitor 类 和 Lo ...

  7. 线程同步(互斥锁、条件、读写锁、信号量)

    参考:(四十三)线程--线程同步(互斥锁.读写锁.条件变量.信号量) 作者:FadeFarAway 发布时间:2017-01-17 21:25:28 网址:https://blog.csdn.net/ ...

  8. 开线程插数据_python笔记7-多线程之线程同步(锁lock)

    前言丨 关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景: 吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸. 为了避免这种情况,在下鱼 ...

  9. iOS开发——网络使用技术OC篇网络爬虫-使用正则表达式抓取网络数据

    网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...

最新文章

  1. Python执行pyinstaller打包生成的exe文件实战
  2. 在linux 下怎么查看服务器的cpu和内存的硬件信息
  3. ubuntu下创建eclipse桌面快捷方式
  4. web播放器(falsh,audio)
  5. Chrome 技术篇-console控制台检测xpath、css唯一性
  6. java中获取特定时间段_获取某一时间段特定星期几的所有日期(Java实现)
  7. 深度理解springboot集成cache缓存之源码解析
  8. SAP Cloud Application Programming bookshop 例子 Vue页面不能正常显示的原因分析
  9. 树莓派python交互界面实例_树莓派综合项目2:智能小车(二)tkinter图形界面控制...
  10. 这一次,用数据解读玩家行为,用实力拿下预测大奖!
  11. only 程序员的一个小总结
  12. 超简单!基于Python搭建个人“云盘”
  13. 计蒜客——数位反转问题(代码+解析)
  14. 通俗讲解c语言指针的作用,C语言指针讲解(史上最通俗最全面最经典)
  15. DataTable 深入解析数据源绑定原理之高级篇
  16. JavaScript——JQuery原理介绍及模拟
  17. Codeforces Round #499 (Div. 2): F. Mars rover(DFS)
  18. 决策树-Cart算法二
  19. 三次样条插值证明过程及代码实现
  20. 快速开发大热风潮之下 这免费的羊毛不来薅薅?

热门文章

  1. js联动清除的一个想法
  2. sql 随机数高效率算法
  3. C语言嵌入式系统编程修炼
  4. js中innerText,innerHTML的用法
  5. JSP 第一天:提交表单--获取表单中的数据值
  6. 九度OJ 朋友圈 并查集
  7. 不用 IDE 手工创建、开发、编译、安装 Android 应用程
  8. 袁隆平院士在湖南农业大学新生典礼上的致辞
  9. C语言atoi()函数用法
  10. https ssl 非对称加密