gpt4 book ai didi

c++ - 在 pthread_cond_wait 中取消线程是否会导致它重新获取相关的互斥锁?

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:57 25 4
gpt4 key购买 nike

我正在查看教科书中的代码:David R. Butenhof 的 Programming With POSIX Threads,我遇到了一个让我有点困惑的地方。

在代码中,为线程注册了一个清理处理程序。清理处理程序解锁由该线程内的条件使用的互斥体。

对于一般的线程,当调用 pthread_cond_wait 时(相关的互斥体应该被锁定),互斥体在线程等待时被解锁 - 然后在条件等待结束时重新获取它,然后返回(即信号或广播发生了)。

因为在等待时,condition_wait 没有锁定互斥量,我会认为如果线程在等待时被取消,它仍然不会锁定互斥量 - 那么为什么清理处理程序需要释放它?

事实上,我认为解锁一个已经解锁的互斥锁实际上是一个错误,这让事情变得更糟。谁能告诉我您认为我哪里感到困惑?

最佳答案

关于解锁已经解锁的互斥量是坏事™,你是正确的。

但是,虽然 pthread_cond_wait() 是一个取消点,但接口(interface)保证在取消处理程序运行之前重新获取互斥量。如果它不做出此保证,则很难知道是否持有互斥量。

参见:The specification了解详情。

关于c++ - 在 pthread_cond_wait 中取消线程是否会导致它重新获取相关的互斥锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com