博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 锁
阅读量:7221 次
发布时间:2019-06-29

本文共 1196 字,大约阅读时间需要 3 分钟。

OSSpinlock 、 pthread_mutex 、 NSLock+IMP 、 NSLock 、 @synchronized 1、OSSpinlock 使用 static OSSpinLock aspect_lock = OS_SPINLOCK_INIT; OSSpinLockLock(&aspect_lock); //要执行的操作 OSSpinLockUnlock(&aspect_lock); 2、pthread_mutex使用 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); pthread_mutex_unlock(&mutex); 3、NSLock使用 NSLock *lock = [NSLock new]; [lock lock]; [lock unlock]; 4、NSLock+IMP NSLock lock = [NSLock new]; [lock lock]; [lock unlock]; typedef id(_IMP) (id, SEL, ...); _IMP lockLock = (_IMP)[lock methodForSelector:@selector(lock)]; _IMP unlockLock = (_IMP)[lock methodForSelector:@selector(unlock)]; lockLock(lock,@selector(lock)); unlockLock(lock,@selector(unlock)); 5、synchronized id obj = [NSObject new]; @synchronized(obj){

} 耗时结果比较: OSSpinlock < pthread_mutex < NSLock+IMP < NSLock < @synchronized 1、@synchronized 内部会创建一个异常捕获的handler和其他内部使用的锁。所以会消耗大量的时间

2、NSLock 和 NSLock+IMP 两个时间非常接近。他们是 pthread mutexes 封装的,但是创建对象的时候需要额外的开销。

3、pthread_mutex 底层的API,性能比较高。

4、OSSpinLock 自旋锁不进入内核,仅仅是重新加载。如果自旋锁占用的时间是极少的(通常是纳秒级别的)性能还是比较高的,减少了系统的直接调用和上下文的切换。

但是,如果有资源竞争的时候,会占用更多的cpu,耗电严重。这个时候,使用 pthread_mutex 可以避免电量的消耗,虽然耗时多一些。

转载于:https://juejin.im/post/5a30f94f5188250a5719bb01

你可能感兴趣的文章
UVA 10766 Organising the Organisation
查看>>
「美团 CodeM 复赛」城市网络
查看>>
python 将Excel表格中的一列数据转化成多行数据
查看>>
Go多线程与channel通信
查看>>
找水王
查看>>
多个线程之间共享数据的方式(卖票问题,存取款问题)
查看>>
观察者模式
查看>>
Bzoj2882 工艺 [线性算法]
查看>>
Bzoj2251 [2010Beijing Wc]外星联络
查看>>
python 发送邮件
查看>>
在凡客四个月的工作总结
查看>>
Qt颜色下拉框
查看>>
31、springboot与任务
查看>>
【转】 一个fork的面试题
查看>>
20131108
查看>>
django.http.request中HttpRequest对象的一些属性与方法
查看>>
英文对应解释
查看>>
Robotics ToolBox机械臂仿真
查看>>
linux添加环境变量
查看>>
【uva 1312】Cricket Field(算法效率--技巧枚举)
查看>>