使用信号量 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()
才有意义。
我是 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()
才有意义。