美文网首页
iOS中的锁

iOS中的锁

作者: 开发界小学生 | 来源:发表于2018-07-24 12:46 被阅读0次

    OSSpinLock

    自旋锁:等待锁的线程会处于忙等(busy-waite)状态,一直占用CPU资源。
    问题:如果等待锁的优先级较高,优先级较低的会一直无法释放
    OSSpinLock lock = OS_SPINLOCK_INIT;
    bool result = OSSpinLockTry(&lock);
    // 加锁
    OSSpinLockLock(&_lock);
    // 解锁
    OSSpinLockUnlock(&_lock);

    os_unfair_lock

    os_unfair_lock lock = OS_UNFAIR_LOCK_INIT
    os_unfair_lock_lock(&_moenyLock);
    os_unfair_lock_unlock(&_moenyLock);

    mutex

    互斥锁:等待锁的线程会处于休眠状态
    // 初始化锁属性
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_setcanceltype(&attr, PTHREAD_MUTEX_DEFAULT);

    // 初始化锁
    pthread_mutex_init(&mutex, &attr);
    // 加锁
    pthread_mutex_lock(&_tickMutex);
    // 解锁
    pthread_mutex_unlock(&_moneyMutex);

    SemaphoreDemo 信号量

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(value);
    // 信号量的值>0 就让信号量的值-1 然后继续执行代码
    dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER);
    // 让信号量的值加1
    dispatch_semaphore_signal(_semaphore);

    性能排列 9DAF296C-8F62-4F53-B226-406BE82C9731.png

    自旋锁 互斥锁比较

    什么情况下使用自旋锁比较划算
    1.预计线程等待时间短
    2.加锁的代码(临界区)经常调用。但竞争情况很少发生
    3.CPU不紧张
    4.多核处理器
    什么情况下使用互斥锁
    1.预计线程等待锁的时间长
    2.单核处理器
    3.临界区有IO操作
    4.临界代码复杂,循环量大
    5.临界代码竞争激烈

    相关文章

      网友评论

          本文标题:iOS中的锁

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