gpt4 book ai didi

ios - GCD : What happens when two threads want to execute blocks on the main thread at the same time

转载 作者:行者123 更新时间:2023-11-28 19:59:56 25 4
gpt4 key购买 nike

我在我的 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的文档还是自己做实验?我可以做什么样的实验?

最佳答案

您要的文件是Concurrency Programming Guide .特别是您需要关于 Dispatch Queues 的部分,更重要的是您需要关于 Migrating Away from Threads 的部分。

您不应该认为自己拥有三个线程(事实上,您可能没有)。你可能有三个街区。您可能有三个队列。如何以及是否将这些分派(dispatch)给线程是一个内部实现细节。

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

主队列是一个串行队列。与其他串行队列一样,每个 block 都必须在允许下一个 block 运行之前完成(这就是为什么如果不小心,可能会使主队列饿死或死锁)。还有并发队列,只需要在考虑下一个 block 之前启动每个 block 。

但关键是要记住,这些只是您可以将 block 放入其中的 FIFO 队列。

关于ios - GCD : What happens when two threads want to execute blocks on the main thread at the same time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com