使用信号量 ObjC 时主线程中的死锁

Deadlock in main thread when use semaphore ObjC

我是 Xcode 和 Objective C 的新手,我正在构建一个非 UI 工具。我发现当我在主线程中使用信号量时,我的主线程将永远挂起并且永远不会醒来

      dispatch_semaphore_t waitSem = dispatch_semaphore_create(0);

      dispatch_async(dispatch_get_main_queue(), ^{

        // do something else
        dispatch_semaphore_signal(waitSem);

      });

      dispatch_wait(waitSem, DISPATCH_TIME_FOREVER);

当主队列在 dispatch_wait() 内阻塞时,不会在主队列上处理任何异步任务。这包括您排队的任务。

dispatch_wait() 只有在没有主队列 运行 任何代码的情况下满足信号量条件时,来自主队列的 dispatch_wait() 才有意义。