码迷,mamicode.com
首页 > 移动开发 > 详细

ios 下锁使用- 09-多线程

时间:2016-04-21 01:13:07      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

 

ios 下锁使用

时间:2014-08-08 15:36:56    

标签:class   代码   问题   文件   使用   com   http   线程   

总结下我所了解的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 下锁使用

标签:class   代码   问题   文件   使用   com   http   线程   

 
评论 一句话评论(0 >> 更多评论
 
 
技术分享       
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
 

ios 下锁使用- 09-多线程

标签:

原文地址:http://www.cnblogs.com/foreveriOS/p/5414961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!