美文网首页
GCD的线程阻塞

GCD的线程阻塞

作者: 邓布利多教授 | 来源:发表于2019-03-11 14:42 被阅读0次

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) {
   /*你的操作*/
}

相关文章

  • GCD的线程阻塞

    A、dispatch_semaphore信号量: 如果初始化的时候信号量为0,并且执行任务的过程中,没有发送信号,...

  • GCD死锁

    GCD死锁原因 GCD死锁的原因是队列阻塞,而不是线程阻塞! 串行和并行 串行和并行都是相对于队列而言的-队列(负...

  • GCD中线程阻塞

    队列:存放任务的地方,可以理解为存放一段一段要执行的代码。 线程:执行任务的流程。执行完A,接着执行B,然后再执行...

  • IOS基础之切回到主线程的N种方式

    方式一:GCD (最常用) 使用GCD又有2种方式:异步回到主线程和同步回到主线程。2种方式的差别在于是否会阻塞原...

  • IOS基础之切回到主线程的N种方式

    方式一:GCD (最常用) 使用GCD又有2种方式:异步回到主线程和同步回到主线程。2种方式的差别在于是否会阻塞原...

  • iOS GCD知识

    为什么要用GCD 更好的利用多核、更好的利用并发 什么时候用到GCD 解决耗时、阻塞主队列(主线程)、完成并发任务...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • ios GCD 多网络请求成功 后刷新页面,与AFNetwork

    1.开胃小菜 怎么用GCD 下载图片呢? ,并且下载的时候显示loading ,这就要异步下载,且不阻塞主线程。...

  • iOS开发多线程--线程状态

    线程简介 线程创建 线程的开启: 线程的运行和阻塞:(1)设置线程阻塞1,阻塞2秒 (2)第二种设置线程阻塞2,以...

  • GCD子线程异步阻塞的坑

    什么?异步并发的子线程也会阻塞其他线程? 哈哈异步子线程是不会阻塞主线程的,但是有可能会影响其他线程 这个是比较坑...

网友评论

      本文标题:GCD的线程阻塞

      本文链接:https://www.haomeiwen.com/subject/ndjvpqtx.html