加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

iOS多线程开发:几个容易被忽略的细节

发布时间:2019-06-08 16:44:27 所属栏目:业界 来源:Eternal_Love
导读:副标题#e# 一般情况下,iOS开发者只要会使用GCD、@synchronized、NSLock等几个简单的API,就可以应对大部分多线程开发了,不过这样是否真正做到了多线程安全,又是否真正充分利用了多线程的效率优势呢?看看以下几个容易被忽略的细节。 读者写者问题(Readers

@synchronized关键字会自动根据传入对象创建一个与之关联的锁,在代码块开始时自动加锁,并在代码块结束后自动解锁,语法简单明了,很方便使用,但是这也导致部分开发者过渡依赖于@synchronized关键字,滥用@synchronized(self)。如上述代码段2中的写法,在一整个类文件里,所有加锁的地方用的都是@synchronized(self),这就可能会导致不相关的线程执行时都要互相等待,原本可以并发执行的任务不得不串行执行。另外使用@synchronized(self)还可能导致死锁:

  1. //class A 
  2.  
  3. @synchronized (self) { 
  4.     [_sharedLock lock]; 
  5.     NSLog(@"code in class A"); 
  6.     [_sharedLock unlock]; 
  7.  
  8. //class B 
  9. [_sharedLock lock]; 
  10. @synchronized (objectA) { 
  11.     NSLog(@"code in class B"); 
  12. [_sharedLock unlock]; 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读