ios 下锁使用- 09-多线程

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 下锁使用

评论 一句话评论(0) >> 更多评论

点这里去评论

周最热标签

更多

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)

周排行

更多

友情链接

国之画  cnbeta   CSDN  博客园  it168   百度统计   站长统计   阳和移动开发

百度云加速

关于我们 - 联系我们

© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4

打开技术之扣,分享程序人生!

时间: 2024-12-21 01:16:03

ios 下锁使用- 09-多线程的相关文章

ios 下锁使用

总结下我所了解的ios下的锁: 1. 互斥锁 @synchronized,@synchronized块隐式的添加一个异常处理例程来保护代码.该处理例程会在异常抛出的时候自动的释放互斥锁.这意味着为了使用@synchronized指令,你必须在你的代码中启用异常处理. NSLock NSRecursiveLock,递归锁,一个线程中可以多次使用 NSConditionLock,条件锁,其实也是一种互斥锁:类似的有NSCondition,不过NSCondition的wait被唤醒时,可能并没有真正满

ios中的几种多线程实现

iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式:1, Thread;2, Cocoa operations;3, Grand Central Dispatch (GCD) (iOS4 才开始支持)下面简要说明这三种不同范式:Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间,它

iOS下的并行开发

在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种状况可以从两个角度出发:对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其他后续任务在其他线程中,当CPU空闲时会继续执行,而此时对于用户而言可以继续进行其他操作:对于多核处理器,如果用户在UI线程中完成某个操作之后,其他后续操作在别的线程中继续执行,用户同

iOS开发中的gcd多线程tips

iOS开发中的gcd多线程tips 我们经常用到的: dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 处理耗时操作的代码块 //通知主线程刷新 dispatch_async(dispatch_get_main_queue(), ^{ //回调或者说是通知主线程刷新 }); }); 其中main_queue是系统默认的串行队列,global_queue是系统默认的并行队列. 什么是串行队列(Serial)? 创建任意个数的串行队列,每个队

iOS下单例模式实现(objective-c arc gcd)

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这里主要介绍下在arc下,利用gcd实现单例. 第一步:声明一个静态实例 static SoundTool *_instance; 第二步:重写初始化方法 + (id)allocWithZone:(struct _NSZone *)zone 在对象初始化分配内存的时候都会调用这个方法,重写该方法时,即便用户没用通过shared方法获取实例,自己初始化依然可以保证得到的是同一个实例. 在gcd后,多线程下保证一个代码只被执

iOS开发中GCD在多线程方面的理解

GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中首次推出,并在最近引入到了iOS4.0. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题. GCD可以完成很多事情,但是这里仅关注在iOS应用中实现多线程所需的一些基础知识. 在开始之前,需要理解是要提供给GCD队列的是代

ios下最简单的正则,RegexKitLite

ios下最简单的正则,RegexKitLite 1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中.备用地址:http://www.cocoachina.com/bbs/job.php?action-download-pid-135286-tid-18111-aid-11143.html- Lv 2.工程中添加libicucore.dylib frameworks. 3.现在所有的nsstring对象就可以调用RegexKitLite中

关于IOS下日期格式分隔符 - 、 /的问题

之前我们项目有一个低价日历,服务端下发的时间格式为: "2014-07-21 09:45:12"  然后一直出不了数据,后来发现. IOS下无论chrome.safari还是Uc如果日期格式是分隔符是 - 的时候,后面带时.分.秒这种情况就是有问题. 大家有兴趣的可以试一下: <script> var s = '2014-04-10 09:10:10'; var d = new Date(s).getTime(); alert(d); //NAN var s2 = '201

iOS下ffmepg开发的一些参考资料汇总(陆续更新)

http://blog.csdn.net/sing_sing/article/details/8468798 近来在搞iOS下视频播放,研究了ffmpeg,现将看到比较好的资料汇总一下,方便自己或者有需要的人查阅. 1.iOS下ffmpeg的编译,网上有很多资料,但很多都有些问题的,找了几天,发现这个资料说得比较详细. http://www.cnblogs.com/ikodota/archive/2012/09/12/compile_ffmpeg_for_iOS.html 不过按这篇文章介绍的方