美文网首页
iOS多线程安全,引出各种锁(下)

iOS多线程安全,引出各种锁(下)

作者: 皮皮他爸 | 来源:发表于2022-05-29 15:33 被阅读0次

5、NSConditionLock

image.png

NSConditionLock其实就是对NSCondition的又一层封装,添加了依赖条件,这样就可以控制锁的顺序

image.png

6、NSRecursiveLock

image.png

NSRecursiveLock跟NSLock的api一模一样,唯一不同的是上面的NSLock是不能递归的,而NSRecursiveLock是可以递归调用的(可以重复的加锁、解锁)


image.png

看看NSRecursiveLock源码内容:

image.png image.png

一目了然,就是pthread的封装,添加了一个pthread_mutexattr_settype(attrs,type)
设置了一个PTHREAD_MUTEX_RECURSIVE属性。

那递归锁究竟有什么作用呢?

看下面的例子


image.png

如果用NSLock肯定会死锁,线程卡死。只能输出了一次10


image.png

warnning:递归锁也有自己需要注意的情况,就是不同的线程去递归调用同一个递归锁,同样会出现死锁崩溃的情况:

image.png

这个时候小伙伴是不是有点懵逼,锁本来就是处理多线程访问同一块内存防止错乱。递归锁可以被多个线程同时加锁,但是解锁的时候会互相等待导致死锁的情况。

如果需要多线程实现递归加锁的功能,可以使用@synchronized

image.png

7、读写锁

读写锁的特性:多读单写,读写互斥


image.png

需要创建一个并发队列,这样可以保证读的操作可以实现多读,然后通过一个栅栏函数可以实现同一个队列里面写的操作在读之后。读的操作使用一个同步方法,可以保证ret值的正确性。

相关文章

  • iOS多线程安全,引出各种锁(下)

    5、NSConditionLock NSConditionLock其实就是对NSCondition的又一层封装,添...

  • iOS多线程安全,引出各种锁(上)

    前沿:什么叫作多线程安全? 我们在多线程访问共享资源的时候,不会出现意想不到的结果。 我们先来才想一下下面的代码输...

  • iOS 多线程

    iOS中的各种锁iOS多线程到底不安全在哪里?

  • OC--各种线程锁

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

  • iOS 多线程

    参考链接 iOS多线程iOS 多线程:『GCD』详尽总结iOS简单优雅的实现复杂情况下的串行需求(各种锁、GCD ...

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

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

  • 多线程(四)

    上篇多线程(三)我们看了多线程的安全隐患 以及各种锁的简单使用,接下来我们来看看锁的比较、以及自旋锁、互斥锁比较 ...

  • iOS开发中常用的几种锁

    iOS开发中常用的几种锁 简介: 操作系统在进行多线程调度的时候,为了保证多线程安全引入了锁的机制,以实现指定代码...

  • 多线程 (三)iOS中的锁

    ios 多线程--锁

  • 线程安全与锁

    IOS编码中,锁的出现其实是因为多线程安全的问题。那么,问题来了,什么是线程安全?为什么锁可以解决线程安全问题?单...

网友评论

      本文标题:iOS多线程安全,引出各种锁(下)

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