美文网首页
iOS 不安全的OSSpinLock锁

iOS 不安全的OSSpinLock锁

作者: 孙掌门 | 来源:发表于2020-02-20 16:22 被阅读0次

iOS 不安全的OSSpinLock锁

OSSpinLock

OSSpinLock 是自旋锁,等待锁的线程会处于忙等状态,一直占用着 CPU

 // 初始化自旋锁
    OSSpinLock lock = OS_SPINLOCK_INIT;
    
    // 加锁
    OSSpinLockLock(&lock);
    
    // 解锁
    OSSpinLockUnlock(&lock);

当多线程访问的时候,一个线程进行了加锁 OSSpinLockLock ,另一个线程走到这里的时候,发现被别的线程加锁了,那么这个线程就会在这里等待,当别的线程释放锁的时候,这个线程发现了,就会加上锁,然后继续执行,让别的线程去等待。

自旋锁就好比写了个 while,whil(被加锁了) ; 不断的忙等,重复这样。

有一个问题是,比如我们有线程1和线程2,如果线程的优先级比较高,那么分配给这个线程的时间就比较多,我们的自旋锁就会发生优先级反转的问题,比如优先级比较低的线程2先进去,那么线程2先加锁了,紧接着线程1进来了,发现已经被加锁了,那么线程1忙等,while(未解锁); 不断的等待,由于线程1的优先级比较高,CPU就一直分配之间给线程1,就没有时间分配给线程2,就有可能导致线程2的代码就没有办法往下走,就会造成线程2没有办法解锁,所以这个锁就不安全了。

相关文章

  • iOS 不安全的OSSpinLock锁

    iOS 不安全的OSSpinLock锁 OSSpinLock OSSpinLock 是自旋锁,等待锁的线程会处于忙...

  • OC中的八大锁 🔐 (线程同步)

    OSSpinLock 自旋锁 不安全 优先级翻转的问题 os_unfair_lock 拿不到锁的时候休眠,...

  • iOS中使用到的加锁方案

    前言 iOS中使用到的锁有哪些? OSSpinLock自旋锁 os_unfair_lock互斥锁 pthread_...

  • iOS中的锁

    起底多线程同步锁(iOS) OSSpinLock NSLock NSRecursiveLock 同步 NSCond...

  • 多线程 加锁

    os_unfair_lock os_unfair_lock用于取代不安全的OSSpinLock ,从iOS10开始...

  • iOS 锁上 synchronized

    iOS中有哪些锁呢? OSSpinLock,dispatch_semaphore_t,os_unfair_lock...

  • iOS 线程锁

    iOS 的锁有以下 10 种:OSSpinLock、os_unfair_lock、dispatch_semapho...

  • 谈 iOS 的锁

    这次主要想解决这些疑问: 1.锁是什么?2.为什么要有锁?3.锁的分类问题4.为什么 OSSpinLock 不安全...

  • iOS开发中的各种锁

    iOS开发中的各种锁 OSSpinlock os_unfair_lock dispath_semaphore pt...

  • 底层21:多线程-锁

    iOS中的线程同步方案: 1.OSSpinLock: 叫做“自旋锁”,等待锁的线程会处于忙等(busy-wait)...

网友评论

      本文标题:iOS 不安全的OSSpinLock锁

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