zoukankan      html  css  js  c++  java
  • dispatch_sync

    dispatch_sync does two things:

    1. queue a block 
    2. blocks the current thread until the block has finished running

    Given that the main thread is a serial queue (which means it uses only one thread), the following statement:

    will cause the following events:

    1. dispatch_sync queues the block in the main queue.
    2. dispatch_sync blocks the thread of the main queue until the block finishes executing.
    3. dispatch_sync waits forever because the thread where the block is supposed to run is blocked. 

    The key to understanding this is that dispatch_sync does not execute blocks, it only queues them. Execution will happen on a future iteration of the run loop.

    The following approach:




    I know where your confusion comes from:

    As an optimization, this function invokes the block on the current thread when possible.

    Careful, it says current thread.

    Thread != Queue

    A queue doesn't own a thread and a thread is not bound to a queue.

    I found this in the documentation (last chapter):

    Do not call the dispatch_sync function from a task that is executing on the same queue that you pass to your function call. Doing so will deadlock the queue. If you need to dispatch to the current queue, do so asynchronously using the dispatch_async function.

    Also, I followed the link that you provided and in the description of dispatch_sync I read this:

    Calling this function and targeting the current queue results in deadlock.

    So I don't think it's a problem with GCD, I think the only sensible approach is the one you invented after discovering the problem.

     https://stackoverflow.com/questions/10984732/why-cant-we-use-a-dispatch-sync-on-the-current-queue
  • 相关阅读:
    ScrollVIEW 2000个ITEM不会卡
    嵌套ScrollView 左右滑动不影响上下滑动
    初学数据结构——栈和队列
    初学数据结构——单向循环链表和双向循环链表。
    初学数据结构——单链表
    bootstrap模态框垂直居中
    Javascript经典实例
    Javascript经典实例
    读书笔记-前言
    web中的中文字体的英文名称
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9174451.html
Copyright © 2011-2022 走看看