Shi*_*zam 6 multithreading semaphore objective-c grand-central-dispatch ios
你怎么能确定是否dispatch_semaphore_t正在等待等待它?我最初在想:
if ( dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW) ) {
NSLog(@"No more resources, wait");
} else {
NSLog(@"Resources available, shouldn't wait");
}
Run Code Online (Sandbox Code Playgroud)
但是做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");
}
Run Code Online (Sandbox Code Playgroud)
最终的结果是不减少信号量,但似乎是一个黑客,建议?
编辑
当我输入我正在做的事情以及我是如何得出这个结论时,我意识到我确实在想错误的解决方案,我只是想知道我是否在等待资源并且能够显示'等待'对话框给用户.我认为这是正确的方法:
[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];
});
});
Run Code Online (Sandbox Code Playgroud)
dispatch_semaphore_wait() 如果它返回0,则只递减信号量值.
如果超时到期(即它返回非零),则信号量值尚未递减.
将成功案例中的减量视为取得计数信号量管理的其中一个资源的所有权,如果您在等待成功后立即发出信号,则表示您已经停止使用该资源,这可能不是您的意思想.
你想做什么 ?
| 归档时间: |
|
| 查看次数: |
6931 次 |
| 最近记录: |