gpt4 book ai didi

c++ - 无锁线程池

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

对于标准 C++11 和/或在一般上下文中,以下推理是否正确?

在实现线程池时,人们通常不想让那些没有工作可做的线程忙于循环。因此,需要某种 std::condition_variable。因此,需要某种 std::mutex。因此,不可能有一个无锁线程池(没有忙循环)。

或者我是否缺少一些使它成为可能的操作系统机制?您能否提供额外的推理来表明不存在无锁非忙循环线程池?

最佳答案

如果允许忙等待,那当然是完全可以的。但是没有忙等待,你需要操作系统的帮助 - 它不一定是互斥体,它当然可以是 read, poll, WaitForMultipleObject(在 Windows 中)或操作系统提供的其他“等待某事”功能。

我不是 100% 确定想出一些东西是不可能的,但一般来说,线程要么正在运行,要么被操作系统占用等待某些东西。据我所知,“等待操作系统中的某些东西”总是某种“锁”。

然而,这里的关键是:

如果在“无事可做”的情况下锁定确实是个问题,那么您可能应该重新考虑整体线程池的使用情况,而不是尝试移除锁定。也许更大的数据包需要通过任何“为线程工作”的方式放在一起。

关于c++ - 无锁线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944538/

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