ios培训之多线程编程线程同步总结

ios培训之多线程编程线程同步总结

ID:35294510

大小:62.98 KB

页数:5页

时间:2019-03-23

ios培训之多线程编程线程同步总结_第1页
ios培训之多线程编程线程同步总结_第2页
ios培训之多线程编程线程同步总结_第3页
ios培训之多线程编程线程同步总结_第4页
ios培训之多线程编程线程同步总结_第5页
资源描述:

《ios培训之多线程编程线程同步总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、北京尚学堂提供1:原子操作-OSAtomic系列函数iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件。不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子式的。因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程只能位于同一个进程的地址空间内。2:锁-NSLock系列对象iOS平台下的锁对象为NSLock对象,进入锁通过调用lock函数,解锁调用unlock函数(因为iOS中大部分的线程同步类都继承自NSLocking协议,所以其

2、加锁/解锁的操作基本都为lock/unlock函数),同一个NSLock对象成功调用lock函数后,在其显式unlock之前任何线程都不能再对此NSLock对象加锁,以达到互斥访问的目的。除了lock函数,对NSLock加锁的函数还包括tryLock以及lockBeforeDate函数,lock函数在成功加锁之间会一直阻塞,而tryLock会尝试加锁,如果不成功,不会阻塞,而是直接返回NO,lockBeforeDate则是阻塞到传入的NSDate日期为止。除了NSLock,iOS还提供了NSRecursive、NSConditionLock类型的锁类型。NSRecursi

3、ve与NSLock最大的区别就是NSRecursive是可重入的,也就是说一个线程可以对一个NSRecursive对象多次调用lock,只要解锁时调用相同次数的unlock函数便可。NSConditionLock是一种带有条件的锁对象,除了基本的lock与unlock函数,还提供了lockWithCondition以及unlockWithCondition,这两个函数接收整型类型的数据作为参数,只有当一个unlockWithCondition对象被调用时,对应的lockWithCondition才会正常返回。这种机制在需几多个线程顺序化的完成某个任务时比较有用,例程如下:

4、1.//线程A  2.id condLock = [[NSConditionLock alloc] initWithCondition:NO_DATA];  3.while(true)  4.{  5.    [condLock lock];  6.    /* Add data to the queue. */  7.    [condLock unlockWithCondition:HAS_DATA];  8.}  1.//线程B  2.while (true)  3.{  4.    [condLock lockWhenCondition:HAS_DATA];  5

5、.    /* Remove data from the queue. */  6.    [condLock unlockWithCondition:(isEmpty ? NO_DATA : HAS_DATA)];  7.    // Process the data locally.  8.}  除了显示的生成NSLock系列对象,还可以通过将代码放到@synchronized内来达到同步的目的,一段放入其内的代码,不同的线程是不能重入的例如:[plain] viewplaincopy1.- (void)myMethod:(id)anObj  2.{      @sy

6、nchronized(anObj)  3.    {  4. //此处代码在同一时刻只能有一个线程执行.  5.    }  6.}  NSLock系列对象都是可以具名的,也就是说,这些对象可以用于不同进程内部的线程的同步。3:事件-NSCondtionNSConditon类型提供了wait与signal函数,分别代表了等待事件的操作以及触发事件的操作。除了wait函数,NSCondition还提供了waitUntilDate函数,其功能与NSLock中的lockBeforeDate大致相同,简要来说就是提供了一个带超时的wait函数。虽然NSCondition与Wind

7、ows环境下Event类型所完成的功能大致类似,但对一个熟悉Event类型的开发人员来说,NSConditon的行为会有点奇怪:第一点:因为遵循NSLocking协议,所以NSCondition在触发与等待过程的前后要分别调用lock与unlock函数,前面提到过,当一个遵循NSLocking协议的对象调用lock后,其他的对此对象的lock调用都会阻塞。那么,如果两个线程A和B,A要触发事件,B接收事件,B线程在调用lock后,通过调用wait函数进入等待事件触发的状态,那么,A线程岂不是再也没有机会对这个事件进行触发了(因

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。