美文网首页
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.临界代码竞争激烈

相关文章

  • OC--各种线程锁

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

  • ios开发中的各种锁机制

    ios开发中的各种锁机制

  • iOS锁系列-目录

    1、 iOS锁系列-NSLock对象锁2、iOS锁系列-NSConditionLock条件锁3、iOS锁系列-NS...

  • iOS 中的锁(4)

    iOS 中的锁(4) 不想篇幅太长,再开一篇继续探究iOS中的锁。 注:本文主要通过Objective-C语言进行...

  • iOS 中的锁(2)

    iOS 中的锁(2) 不想篇幅太长,再开一篇继续探究iOS中的锁。 注:本文主要通过Objective-C语言进行...

  • iOS 中的锁(3)

    iOS 中的锁(3) 不想篇幅太长,再开一篇继续探究iOS中的锁。 注:本文主要通过Objective-C语言进行...

  • iOS开发中的锁

    iOS开发中的锁 本人对锁没有深入理解,只是看了几篇文章,在这里做一下简单的总结。 iOS开发中,锁是用来解决线程...

  • iOS 多线程

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

  • iOS中锁的分析

    iOS中锁的分析 ** @synchronized ** 递归互斥锁 // objc_sync_enter loc...

  • iOS中的锁

    iOS中的锁 前言 写在前面: 临界区:指的是一块对公共资源进行访问的代码,并非一种机制或是算法。 自旋锁:是用于...

网友评论

      本文标题:iOS中的锁

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