如何确定 dispatch_semaphore_t
是否正在等待而导致等待?我最初在想:
if ( dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW) ) {
NSLog(@"No more resources, wait");
} else {
NSLog(@"Resources available, shouldn't wait");
}
但是执行 dispatch_semaphore_wait()
时信号量会递减,所以我在想:
if ( dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW) ) {
NSLog(@"No more resources, wait");
} else {
dispatch_semaphore_signal(mySemaphore);
NSLog(@"Resources available, shouldn't wait");
}
哪个具有不递减信号量的最终结果但看起来像是 hack,建议?
编辑
当我输入我正在做的事情以及我是如何得出这个结论时,我意识到我确实以错误的方式思考解决方案,我只是想知道我是否正在等待资源并且能够向用户显示“等待”对话框。我认为这是正确的方法:
[self showWait];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_FOREVER);
dispatch_async(dispatch_get_main_queue(), ^{
[self hideWait];
});
});
最佳答案
dispatch_semaphore_wait()
仅在返回 0 时递减信号量值。
如果超时已过期(即返回非零值),则信号量值尚未递减。
将成功案例中的递减视为获得由计数信号量管理的资源之一的所有权,如果您在成功等待后立即发出信号,则表示您已立即停止使用该资源,这大概是不是你想要的。
你想做什么?
关于ios - 如何确定是否正在等待调度信号量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799288/