GCD:当两个线程想要同时在主线程上执行块时会发生什么

希姆

我在IOS应用程序中使用GCD。我有三个线程:主线程,线程2和线程3。

以下代码在线程2上执行:

    dispatch_async(dispatch_get_main_queue(), ^{ code block 1 ...

因此代码块1将在主线程上执行。如果在代码块1完成运行之前在线程3中执行以下代码,会发生什么情况:

    dispatch_async(dispatch_get_main_queue(), ^{ code block 2 ...

bock2会等到bock1终止吗?

我如何找到此类问题的答案?我应该阅读APPLE的文档还是自己做一些实验?我可以做什么样的实验?

罗布·纳皮尔

所需的文档是《并发编程指南》特别是,您需要有关调度队列的部分,并且更重要的是,您需要有关从线程迁移的部分。

您不应认为自己具有三个线程(实际上,您可能没有)。您可能有三个街区。您可能有三个队列。内部调度细节是如何以及如何将它们调度到线程的。

在GCD中,单词“ dispatch”的意思是“放在队列中”。当一个块到达系统队列的最前面时,它将有资格在可用线程上运行。队列可以馈入其他队列,但是最终它们必须绑定到系统队列之一(否则它们将永远不会执行)。

主队列是串行队列。像其他串行队列一样,每个块都必须在允许下一个块运行之前完成(这就是为什么您不小心会饿死或死锁主队列的原因)。还有并发队列,它们仅要求在考虑下一个块之前启动每个块。

但是关键是要记住,这些只是可以放入块的FIFO队列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当两个线程同时调用相同的静态方法时会发生什么?

来自分类Dev

在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

来自分类Dev

当两个线程尝试修改/访问并发HashMap中的相同密钥时会发生什么?

来自分类Dev

当两个并发线程尝试从CopyOnWriteArrayList中删除元素时会发生什么?爪哇

来自分类Dev

两个线程同时执行同步块

来自分类Dev

两个SIP客户端同时登录时会发生什么

来自分类Dev

当您同时触摸两个按钮时会发生什么

来自分类Dev

当两个进程同时调用register()时会发生什么

来自分类Dev

当两个对象彼此相等时会发生什么

来自分类Dev

当线程进入Java中的同步块/方法时会发生什么情况

来自分类Dev

当线程尝试同时调用静态和非静态同步方法时会发生什么?

来自分类Dev

当表单上的两个按钮等同时实际会发生什么?

来自分类Dev

当两个脚本想同时使用LOCK_EX写入文件时会发生什么?

来自分类Dev

在Linux内核中同时发生两个中断时会发生什么

来自分类Dev

使用可调用对象时主线程会发生什么

来自分类Dev

NSURLSession-执行两个请求并解析两个响应,但仍会阻塞主线程

来自分类Dev

需要在主线程上执行什么

来自分类Dev

当两个信号量同时更改并且两个信号之一不能立即减少时会发生什么?

来自分类Dev

Play框架:当请求超出可用线程时会发生什么

来自分类Dev

多线程程序创建新进程时会发生什么?

来自分类Dev

多线程程序创建新进程时会发生什么?

来自分类Dev

在后台线程上执行NSBlockOperation之后立即在主线程上运行一个块

来自分类Dev

从针对另一个调度队列的主线程发出dispatch_sync时,主队列/主线程会发生什么情况?

来自分类Dev

在同步方法内部的线程中的同步块会发生什么?

来自分类Dev

同时运行两个线程

来自分类Dev

确保两个线程同时启动

来自分类Dev

当两个进程写入mmaped文件的相同部分时会发生什么?

来自分类Dev

将两个分支与子模块合并时会发生什么?

来自分类Dev

当两个应用程序监视同一iBeacon区域时会发生什么?

Related 相关文章

  1. 1

    当两个线程同时调用相同的静态方法时会发生什么?

  2. 2

    在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

  3. 3

    当两个线程尝试修改/访问并发HashMap中的相同密钥时会发生什么?

  4. 4

    当两个并发线程尝试从CopyOnWriteArrayList中删除元素时会发生什么?爪哇

  5. 5

    两个线程同时执行同步块

  6. 6

    两个SIP客户端同时登录时会发生什么

  7. 7

    当您同时触摸两个按钮时会发生什么

  8. 8

    当两个进程同时调用register()时会发生什么

  9. 9

    当两个对象彼此相等时会发生什么

  10. 10

    当线程进入Java中的同步块/方法时会发生什么情况

  11. 11

    当线程尝试同时调用静态和非静态同步方法时会发生什么?

  12. 12

    当表单上的两个按钮等同时实际会发生什么?

  13. 13

    当两个脚本想同时使用LOCK_EX写入文件时会发生什么?

  14. 14

    在Linux内核中同时发生两个中断时会发生什么

  15. 15

    使用可调用对象时主线程会发生什么

  16. 16

    NSURLSession-执行两个请求并解析两个响应,但仍会阻塞主线程

  17. 17

    需要在主线程上执行什么

  18. 18

    当两个信号量同时更改并且两个信号之一不能立即减少时会发生什么?

  19. 19

    Play框架:当请求超出可用线程时会发生什么

  20. 20

    多线程程序创建新进程时会发生什么?

  21. 21

    多线程程序创建新进程时会发生什么?

  22. 22

    在后台线程上执行NSBlockOperation之后立即在主线程上运行一个块

  23. 23

    从针对另一个调度队列的主线程发出dispatch_sync时,主队列/主线程会发生什么情况?

  24. 24

    在同步方法内部的线程中的同步块会发生什么?

  25. 25

    同时运行两个线程

  26. 26

    确保两个线程同时启动

  27. 27

    当两个进程写入mmaped文件的相同部分时会发生什么?

  28. 28

    将两个分支与子模块合并时会发生什么?

  29. 29

    当两个应用程序监视同一iBeacon区域时会发生什么?

热门标签

归档