繁体   English   中英

在等待超时时发送信号量信号

Dispatch semaphore signal on wait timeout

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

dispatch_semaphore_wait运行到超时时,它会自动发出信号(增加计数),还是手动完成?

1 个回复

dispatch_semaphore_wait()递减计数信号量,并等待结果值小于零。 如果发生超时,则此减量会反转,因此您无需手动调整计数。

对于我来说,这对文档来说并不明显,但与负数一致表明线程正在等待信号量的事实一致。 另请参阅源代码此注释:

// If the internal value is negative, then the absolute of the value is
// equal to the number of waiting threads. ...

您也可以通过打印信号量的debugDescription来验证它,输出显示当前值:

let sem = dispatch_semaphore_create(0)

NSLog("%@", sem.debugDescription)
// <OS_dispatch_semaphore: semaphore[0x100514a70] = { ..., value = 0, orig = 0 }>
// --> Initial value is 0

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC)),
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        NSLog("%@", sem.debugDescription)
        // <OS_dispatch_semaphore: semaphore[0x100514a70] = { ..., value = -1, orig = 0 }>
        // --> One thread is waiting, value is -1.
}

let ret = dispatch_semaphore_wait(sem, dispatch_time(DISPATCH_TIME_NOW, 2*Int64(NSEC_PER_SEC)))
NSLog("%@", sem.debugDescription)
// <OS_dispatch_semaphore: semaphore[0x100514a70] = { ..., value = 0, orig = 0 }>
// --> Time out, value is 0 again.
2 由于等待,永远不会执行dispatch_semaphore_signal

我正在尝试拍摄两张照片,并希望它们按顺序运行。 捕获图片的方法是使用异步运行的方法完成的。 我目前使用信号量来尝试使其同步,但是它使程序无法运行。 我相信这是因为completionHandler在同一线程上运行,并且由于该线程已锁定,因此无法执行以释放信号量。 这是我当前的代码: ...

3 dispatch_semaphore_wait不等待信号量

我开发了以下方法,它检查应用程序与服务器通信的能力。 该方法执行一个简单的查询,并知道如果它得到一个结果,应该连接应用程序(基本的ping机制)。 我正在使用Apple文档中建议的'dispatch_semaphore_wait' 我的目标是等待响应或短暂的超时,以确定我们是否真 ...

4 信号量等待()和信号()

我正在经历进程同步,并且在理解信号量方面遇到困难。 所以这是我的疑问: 消息来源说 " 信号量 S 是一个整数变量,可通过标准原子操作即 wait() 和 signal() 访问。 它还提供了 wait() 的基本定义 信号()的定义 假设信号量的初始值为 1,假设有两个并发进程 P0 ...

5 中止所有dispatch_semaphore_wait

在iOS中,GCD提供了信号灯以同步对有限资源供应的访问。 在我的程序中,我正在从外部设备读取数据。 该外部设备可以断开连接,并且程序将永远不会再发出信号。 因此,我们最终遇到以下情况: 线程1正在等待信号量 线程2知道没有等待会成功 最终, dispatch ...

7 ViewController作为Popup在等待Dispatch信号量时

我正在使用Dispatch Semaphore等待我发出URL JSON请求,这种等待可能需要一段时间。 为了克服这种情况,我决定制作一个新视图,并在请求发出时将其显示为弹出窗口。 为此,我使用下面的代码: showPopUp的作用: 问题是,showPopUp函数仅在de ...

8 libdispatch _dispatch_semaphore_wait_slow崩溃

我有时会在libdispatch内部发生崩溃,其中包含来自SecItemCopyMatching函数的以下回溯。 这次崩溃似乎完全是随机的,它从未发生在我的同事身上。 它主要发生在32位iOS模拟器中,但它也在设备上发生过一次。 我查看了libdispatch源代码 ,我可以看到 ...

9 在哪个线程上dispatch_semaphore_wait正在等待?

我试图更好地理解dispatch_semaphore_wait的使用。 我有这种使用的想法,但我没有得到我实际上在等待哪个线程。 如果我将在主线程上执行此操作,则将阻塞主线程,或者如果我将执行以下操作: 我要在哪个线程上等待? 还是如果我改用DISPATCH_QUEUE_ ...

10 dispatch_semaphore_wait()无法收到该信号量

我的代码是: 运行代码后 它什么也没发生! 那么,代码有什么问题呢? 调用dispatch_semaphore_wait将阻止线程,直到dispatch_semaphore_signal被调用。 这意味着必须从其他线程调用信号,因为当前线程被完全阻塞。 此外,您永远不 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM