zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    spring mvc 总结
    linux安装tomcat及优化
    mysql支持emoji表情
    面试问题
    linux安装jdk mysql
    webstorm 介绍
    spring 总结
    UML工具
    js bom dom
    awt多线程聊天
  • 原文地址:https://www.cnblogs.com/Lanht/p/10167609.html
Copyright © 2011-2022 走看看