gpt4 book ai didi

c++ - 使用条件变量(监视器)同步线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:56 31 4
gpt4 key购买 nike

我需要同步多个线程(使用 POSIX 线程)。此外,我正在使用条件变量(监视器)来实现这一点。

问题是我必须实现“先到先得”的策略。假设多个线程正在等待另一个线程发出条件变化的信号,pthread_cond_wait 是否调用将线程本身放入队列中,还是我应该定义一个显式队列来实现这一点?一个可能的解决方案也可能是使用锁。

最佳答案

Pthreads API 不保证 pthread_cond_wait + pthread_cond_signal/pthread_cond_broadcast 组合的公平性。 spec明确指出调度策略将决定等待线程唤醒的顺序:

If more than one thread is blocked on a condition variable, the scheduling policy shall determine the order in which threads are unblocked.

如果您不想依赖调度器(即使是 has "aged well" like Linux' CFS 调度器),您需要自己控制停放和停放。

至于公平等待队列的实现,您可以构建在 MCS queue 之上.

关于c++ - 使用条件变量(监视器)同步线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953460/

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