gpt4 book ai didi

c++ - 'fair' 是如何在调用notify_one()时从wait()唤醒线程的标准C++atomic_flag

转载 作者:行者123 更新时间:2023-12-03 07:52:26 25 4
gpt4 key购买 nike

当调用notify_one()时,是否有关于在atomic_flag上调用wait()的线程被唤醒的顺序的公平性信息。它们是否按照进入 wait() 的确切顺序被唤醒,可以说是 FIFO 吗?

原子标志变量似乎返回“始终无锁”。我知道它们在任何实现中都保证是无锁的,但我不确定如果使用 wait() 它们是否仍然是无锁的,因此某种机制必须决定服务员的唤醒。其他一些同步方法可以保证公平性,但是以幕后内存分配为代价的。

有谁知道这是如何与atomic_flags一起使用的。我将所有同步器更改为使用原子标志,并且它们工作得非常快。然而我忽略了公平性。

谢谢。

最佳答案

标准不提供任何保证,这取决于标准库的实现。

甚至不能保证只有一个线程被解除阻塞。任何数量的合格线程(但如果至少有一个合格的话,则至少有一个)可以被解除阻塞。只需将 notify_one 转发到 notify_all 的实现就符合要求。

关于c++ - 'fair' 是如何在调用notify_one()时从wait()唤醒线程的标准C++atomic_flag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76835064/

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