ios 下锁使用
时间:2014-08-08 15:36:56
总结下我所了解的ios下的锁:
1. 互斥锁
@synchronized,@synchronized块隐式的添加一个异常处理例程来保护代码。该处理例程会在异常抛出的时候自动的释放互斥锁。这意味着为了使用@synchronized指令,你必须在你的代码中启用异常处理。
NSLock
NSRecursiveLock,递归锁,一个线程中可以多次使用
NSConditionLock,条件锁,其实也是一种互斥锁;类似的有NSCondition,不过NSCondition的wait被唤醒时,可能并没有真正满足条件,需要检查,例如:
[cocoaCondition
lock
];
while
(timeToDoWork <=
0
)
[cocoaCondition
wait
];
timeToDoWork--;
自旋锁也是一种排它锁
dispatch once也可以认为是一种排它锁,其效率相当高;它的实现我通过看一篇文章有了基本的了解,不采用内存屏障的方式,主要是采用分支预测的方式,用于提示之前分支预测错误,达到效果;比较有意思;有一个问题就是dispatch once是否可以用作一些块的排他执行,还有效率是不是更好
2. 信号量
dispatch_semaphore,gcd的,不过没找到posix和mach的;posix应该可以可以用的,mach据说好像是内核态的
3. 自旋锁
OSSpinLockLock
4. 读写锁
posix读写锁:可以参考https://github.com/otium/OTMRWLock
5. 分布式锁
分布式锁(distributed lock)进程级别的锁,只报告状态,不阻塞进程。NSDistributedLock 使用文件系统实现。这个我完全没概念
无锁同步
1. 原子变量
原子变量,也就是发送FSB锁总线,硬件锁
type __sync_fetch_and_add (type *ptr, type value);
type __sync_fetch_and_sub (type *ptr, type value);
type __sync_fetch_and_or (type *ptr, type value);
type __sync_fetch_and_and (type *ptr, type value);
type __sync_fetch_and_xor (type *ptr, type value);
type __sync_fetch_and_nand (type *ptr, type value);
type __sync_add_and_fetch (type *ptr, type value);
type __sync_sub_and_fetch (type *ptr, type value);
type __sync_or_and_fetch (type *ptr, type value);
type __sync_and_and_fetch (type *ptr, type value);
type __sync_xor_and_fetch (type *ptr, type value);
type __sync_nand_and_fetch (type *ptr, type value);
这个ios也有对应的函数,如 OSAtomicIncrement32等;这个相对来说是比较高效的
2. CAS
CAS算是真正无锁,__sync_bool_compare_and_swap,线程安全
ios 下锁使用,布布扣,bubuko.com
ios 下锁使用
周最热标签
logclasscomstylehttp使用siitsrcla代码sphtml文件java问题数据des方法haforascaioandroidbs算法Gotp一个im时间adctargetwordon事务efjstrlinux服务器c++学习aiuiressqlios工作00安卓64数据库staticnbsp程序函数ext
分享档案
2015年03月09日 (980)
2015年03月08日 (1337)
2015年03月07日 (1415)
2015年03月06日 (2105)
2015年03月05日 (2256)
2015年03月04日 (2078)
2015年03月03日 (1929)
2015年03月02日 (2015)
2015年03月01日 (1190)
2015年02月28日 (1760)
周排行
- 在Android下安装kali-linux的简单方法 2014-09-21
- 移动web页面前端开发总结 2014-07-29
- app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印 2015-01-16
- 【Android界面实现】SlidingMenu最新版本使用详解 2014-10-22
- 【iOS开发-27】解决方案:An error was encountered while running(Domain=FBSOpenApplicationErrorDomain, Code=4) 2014-10-01
- 使用UE4发布安卓平台游戏 2014-07-15
- Android 提示Your project contains error(s),please fix them before running your application 2014-05-10
- Android实现双进程守护 2014-11-18
- Android Gson解析多层嵌套复杂数据 2014-08-06
- swipe.js 轻松实现手机端滑动效果 2014-11-19
国之画 cnbeta CSDN 博客园 it168 百度统计 站长统计 阳和移动开发
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
↑
↓