GCD的线程阻塞

A、dispatch_semaphore信号量:

如果初始化的时候信号量为0,并且执行任务的过程中,没有发送信号,那么wait之后的任务全部不能执行。

B、dispatch_barrier_async栅栏:

会造成短暂的阻塞线程,实际上并不能算作真正的阻塞。

C、dispatch_group_wait线程等待:

在等待前面的任务执行的过程中,后面的任务全部停止,在这个等待的过程中,也等同于短暂的阻塞线程。

D、串行主队列

E、同步线程执行同步串行队列

F、异步线程执行同步串行队列

D、E、F会直接造成死锁,因为同步串行队列,只能一个一个任务的执行。不管是在新的同步线程里还是异步线程里执行都会造成相互等待,并且是永久的等待,所以直接死。


  • 加锁解锁方式

1、信号量

dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);

//加锁
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//解锁
dispatch_semaphore_signal(semaphore);

2、NSLock

NSLock *myLock;

//加锁
[myLock lock];
//解锁
[myLock unlock];

3、synchronized互斥锁

@synchronized (self) {
   /*你的操作*/
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 6,334评论 1 14
  • 文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。通过本文,您将了解到: 1. GCD 简介 2. G...
    晓_我想去环游世界阅读 1,202评论 2 8
  • 体验入:最近团队中一直有个人在一直挑事,大家都很烦。 转身用:支持成长照镜子 转身用: 让你怨恨的人, 是你生命的...
    熊毅滨1349阅读 108评论 0 0
  • 在历史的长河中,说话曾是一种权利、一种待遇。看秦始皇焚书坑儒,烧毁了多少欲言的喉咙,看明清时期“盛行”的文字狱,封...
    渔夫与鱼阅读 242评论 0 0
  • 10.24开始每天写200字以上文字,一直坚持3个月,昨天终于坚持3个月了,终于不用每天想着更新了…只需要想写...
    云采飞扬阅读 328评论 0 2

友情链接更多精彩内容