首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用Xcode 9设置了断点,为什么pthread_cond_wait会返回?

如果用Xcode 9设置了断点,为什么pthread_cond_wait会返回?
EN

Stack Overflow用户
提问于 2017-10-23 14:47:22
回答 1查看 204关注 0票数 0

下面的快速代码应该永远阻塞-- pthread_cond_wait不应该返回,因为没有人发出信号。

当我运行它时,它会像预期的那样阻塞。

如果我使用Xcode 9 (9.0.1)设置断点,则执行将继续到print("hi")行。

这是一个奇怪的Xcode错误,还是我做错了什么?

代码语言:javascript
复制
import Foundation

func check(_ ret:Int32){
    if ret != 0 {
        fatalError("Error \(ret)")
    }
}

var cond = pthread_cond_t()
pthread_cond_init(&cond,nil)
var mutex = pthread_mutex_t()
check(pthread_mutex_init(&mutex,nil))
check(pthread_mutex_lock(&mutex))
check(pthread_cond_wait(&cond,&mutex))
print("Hi")
check(pthread_mutex_unlock(&mutex))

也检查了pthread_cond_timedwait,同样的行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-23 15:13:37

pthread_cond_wait可以拥有假唤醒。POSIX对此非常明确:

在使用条件变量时,总是有一个包含与每个条件等待关联的共享变量的布尔谓词,如果线程继续执行,则为真。可能会发生来自pthread_cond_timedwait()或pthread_cond_wait()函数的虚假唤醒。由于来自pthread_cond_timedwait()或pthread_cond_wait()的返回并不意味着任何关于该谓词值的内容,因此在返回时应该重新计算谓词。

在您的环境中,在调试器下运行会导致这样的唤醒,可能是因为调试器触发了额外的信号。如果调试器以这种方式影响应用程序行为,肯定会很烦人,但从技术上讲,它并不是一个bug。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46892256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档