- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道这不是一个强有力的问题,但我必须弄清楚这个概念。
我定义了 myBlock
如下。
void(^myBlock)(void) = ^{
for(int i = 0;i < 10 ; i++)
{
NSLog(@"%d and current queue = %@",i,[NSThread currentThread]);
}
};
现在在 viewDidLoad
方法中,当我在主队列上独立使用 dispatch_sync()
方法时,主队列被阻塞。
这是示例。
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue,myBlock);
}
但是但是,当我在主线程上使用相同的 dispatch_sync()
函数时 在并发队列上触发的 dispatch_async()
函数 block 中然后主线程不阻塞。
这是示例。
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue,^{
dispatch_sync(dispatch_get_main_queue(),myBlock);
});
}
我不清楚为什么会这样?为什么主线程在独立调用dispatch_sync()
时阻塞?
最佳答案
在串行队列(如主队列)上使用 dispatch_sync
时,当前线程必须等待,直到执行分派(dispatch)的代码。
当 block 从串行队列同步分派(dispatch)到同一队列时,会发生死锁。
关于iphone - 为什么对主队列的 dispatch_sync( ) 调用会阻塞主队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18740872/
请考虑以下代码: - (void)viewDidLoad { [super viewDidLoad]; dispatch_sync(dispatch_get_global_queue(
此代码阻塞了对 dispatch_sync 的调用。我是调度队列的新手。这会阻止什么原因? NSLog(@"%@",dispatch_get_current_queue()); NSLog(@"%@"
我有两个类,一个 View Controller 和另一个 (TwitterCrawler) 向 Twitter API 执行网络请求。我在加载 View Controller 时发出第一个网络请求,
以下代码中的死锁。为什么? dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_async(queue, ^{ dispa
我正在研究 GCD 机制,我有几个问题。如果我的 Material 有误,请您纠正我,我将不胜感激。 1。问题) 据我所知,GCD 有 4 个具有不同优先级的全局并发队列。例如,当我们编写 DISPA
{ dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0); dispatch_syn
是否可以杀死由于 dispatch_sync 而被锁定的线程?这是代码: dispatch_sync(q_, ^{ ... }); 这是锁定时的堆栈跟踪: #0 0x00007fff8d6995
我知道在串行队列上执行此操作会导致死锁,但我还没有发现任何提及在并发队列上执行此操作会导致死锁的内容。我只是想验证它不会死锁(它似乎不会,因为它只会阻塞队列中的一个线程,任务将在同一队列中的另一个线程
这个问题在这里已经有了答案: Why is this dispatch_sync() call freezing? (2 个答案) How to use background thread in s
我对读取共享资源时使用 dispatch_sync 有一些疑问。我在 Stack Overflow 上搜索了几个问题(例如:GCD dispatch_barrier or dispatch_sync?
我只是想确认为什么需要这样做。 我将此代码添加到 KIImagePager(一个 cocoapod)以加载应用本地的图像(默认代码从 url 加载图像)。 根据同事的建议,这是我的工作代码: disp
苹果文档说:(concurrencyProgrammingGuide,page49)重要提示:您永远不应从计划传递给函数的同一队列中执行的任务调用 dispatch_sync 或 dispatch_s
我知道这不是一个强有力的问题,但我必须弄清楚这个概念。 我定义了 myBlock 如下。 void(^myBlock)(void) = ^{ for(int i = 0;i < 10 ; i++
这是我需要做的。我希望 dispatch_sync 是使用 GCD 的最佳方式 我在 Appdelegate 的 applicationDidBecomeActive 回调中有一段临界区代码.. 我将
假设我从并发队列调用 dispatch_sync - 它会阻塞整个队列还是只阻塞那个执行线程? 最佳答案 dispatch_sync 会阻塞调用者线程直到执行完成,一个并发队列有多个线程所以它只会阻塞
我正在使用 dispatch_sync 执行一个 block ,并且该 block 已正确执行。但是这个 block 是在主线程上执行的。根据 Apple 文档: Serial queues (als
我遇到了一个场景,我有一个委托(delegate)回调,它可能发生在主线程或另一个线程上,直到运行时我才知道是哪个(使用 StoreKit.framework)。 我还有需要在回调中更新的 UI 代码
我最近在玩 UIDocument 并且混淆了 dispatch_sync/dispath_async 的概念 我有一个获取所有文档信息的方法 for (int i=0; i 所以 -openWithC
我有两个带有dispatch_sync的 block ,当第一个 block 结束时,我向用户显示窗口并开始运行第二个 block 。但在第二个 block 结束之前我不会单击屏幕上的任何按钮.. 看
我正在运行这段代码 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSLog(@
我是一名优秀的程序员,十分优秀!