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

本文共 1144 字,大约阅读时间需要 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 可以避免电量的消耗,虽然耗时多一些。

转载地址:http://aemya.baihongyu.com/

你可能感兴趣的文章
Machine Learning Techniques -6-Support Vector Regression
查看>>
会计基础_001
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
User implements HttpSessionBindingListener
查看>>
eclipse的maven、Scala环境搭建
查看>>