iOS开发线程同步技术-锁
概览
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开发线程同步技术-锁相关推荐
- Linux多线程开发-线程同步-互斥锁pthread_mutex_t
1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...
- Java核心(三)并发中的线程同步与锁
2019独角兽企业重金招聘Python工程师标准>>> 乐观锁.悲观锁.公平锁.自旋锁.偏向锁.轻量级锁.重量级锁.锁膨胀...难理解?不存的!来,话不多说,带你飙车. 上一篇介绍了 ...
- .Net线程同步技术解读
C#开发者(面试者)都会遇到lock(Monitor),Mutex,Semaphore,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 什么是线程安 ...
- Java 多线程和并发编程:(二)线程同步 Lock 锁
线程同步 Lock 锁 1.Lock 锁 2.步骤 3.Lock 与 synchronized 的区别 1.Lock 锁 Lock 锁:对需要上锁的地方上锁 JDK1.5 后新增的功能 与 Synch ...
- 线程同步----递归锁
概述 最常见的进程/线程的同步方法有互斥锁(或称互斥量Mutex),读写锁(rdlock),条件变量(cond),信号量(Semophore)等.在Windows系统中,临界区(Critical Se ...
- 转:C# 线程同步技术 Monitor 和Lock
原文地址:http://www.cnblogs.com/lxblog/archive/2013/03/07/2947182.html 今天我们总结一下 C#线程同步 中的 Monitor 类 和 Lo ...
- 线程同步(互斥锁、条件、读写锁、信号量)
参考:(四十三)线程--线程同步(互斥锁.读写锁.条件变量.信号量) 作者:FadeFarAway 发布时间:2017-01-17 21:25:28 网址:https://blog.csdn.net/ ...
- 开线程插数据_python笔记7-多线程之线程同步(锁lock)
前言丨 关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景: 吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸. 为了避免这种情况,在下鱼 ...
- iOS开发——网络使用技术OC篇网络爬虫-使用正则表达式抓取网络数据
网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...
最新文章
- Python执行pyinstaller打包生成的exe文件实战
- 在linux 下怎么查看服务器的cpu和内存的硬件信息
- ubuntu下创建eclipse桌面快捷方式
- web播放器(falsh,audio)
- Chrome 技术篇-console控制台检测xpath、css唯一性
- java中获取特定时间段_获取某一时间段特定星期几的所有日期(Java实现)
- 深度理解springboot集成cache缓存之源码解析
- SAP Cloud Application Programming bookshop 例子 Vue页面不能正常显示的原因分析
- 树莓派python交互界面实例_树莓派综合项目2:智能小车(二)tkinter图形界面控制...
- 这一次,用数据解读玩家行为,用实力拿下预测大奖!
- only 程序员的一个小总结
- 超简单!基于Python搭建个人“云盘”
- 计蒜客——数位反转问题(代码+解析)
- 通俗讲解c语言指针的作用,C语言指针讲解(史上最通俗最全面最经典)
- DataTable 深入解析数据源绑定原理之高级篇
- JavaScript——JQuery原理介绍及模拟
- Codeforces Round #499 (Div. 2): F. Mars rover(DFS)
- 决策树-Cart算法二
- 三次样条插值证明过程及代码实现
- 快速开发大热风潮之下 这免费的羊毛不来薅薅?