gpt4 book ai didi

c - pthread_cond_broadcast 取消阻止不等待条件变量的线程

转载 作者:行者123 更新时间:2023-11-30 15:08:49 24 4
gpt4 key购买 nike

我正在使用 POSIX,并且有 3 个线程。

请注意下面的所有线程都使用相同的互斥锁。

线程 1 正在使用 pthread_cond_wait 等待满足条件(等待在 while 循环内,因此也不是无条件等待)。当条件满足时,线程 2 将发出 pthread_cond_broadcast。线程 3 使用互斥体进行锁定,但不等待条件变量。

因此,线程1正在等待信号/广播,线程3正在等待互斥锁(该线程只是等待获取互斥锁)。现在,如果线程 2 发送广播,则线程 3 会以某种方式获取互斥锁,而不是线程 1。为什么会发生这种情况?我正在使用 glibc2.19 的 debian 8.3。广播不应该唤醒正在等待条件变量的线程吗?

最佳答案

我假设您在线程 2 中锁定了一个互斥锁(否则您的问题就没有意义)。因此,当您调用 pthread_cond_broadcast 时,它只会解除阻塞正在等待条件变量的线程。没有执行转移发生。

然后您解除互斥体的阻塞,并期望正在等待的线程应该被调度。但这种期望是错误的,因为由调度程序决定下一个要调度的线程,并且由于互斥锁不再被锁定,线程 3 也已解除阻塞。因此,由调度程序决定接下来运行哪一个(1 或 3)。在这种情况下没有什么可以限制它。

关于c - pthread_cond_broadcast 取消阻止不等待条件变量的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37135346/

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