美文网首页
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锁

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