gpt4 book ai didi

c - 在 C 中使用条件变量实现优先级队列

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:52 24 4
gpt4 key购买 nike

我目前对条件变量的理解是,所有阻塞(等待)的线程都被插入到一个基本的 FIFO 队列中,其中第一项在调用 signal() 时被唤醒。

有什么方法可以修改这个队列(或创建一个新结构)以作为优先队列执行吗?我已经考虑了一段时间,但大多数解决方案最终都受到 C.V. 和互斥体固有的现有队列结构的阻碍。

谢谢!

最佳答案

我认为您应该重新考虑您要尝试做的事情。如果您正在尝试优化性能,您可能找错了方向。

pthread_cond_signal()甚至不能保证只解除阻塞一个线程 -- 它保证解除阻塞至少 一个线程,因此您的代码能够更好地处理多个线程同时解除阻塞的情况。典型的做法是让每个线程在解除阻塞后重新检查条件,如果为假,则再次返回等待。

你可以实现某种方案,让你自己的线程优先队列等待,每个线程在开始等待之前立即将自己添加到该队列,然后它会在解除阻塞时检查队列,但这会增加了很多复杂性和很多潜在的严重问题(竞争条件、死锁等)。它还增加了不小的开销。

此外,如果更高优先级的线程在条件变量收到信号的同时开始等待条件变量,会发生什么情况?谁被解除阻塞,新到达的高优先级线程还是之前最高优先级的线程?

线程解锁的顺序完全取决于内核的线程调度程序,因此您只能任其摆布。我什至不会假设 FIFO 排序。

关于c - 在 C 中使用条件变量实现优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1694491/

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