gpt4 book ai didi

c++ - 线程池和作业队列架构?

转载 作者:太空狗 更新时间:2023-10-29 23:08:27 25 4
gpt4 key购买 nike

我有一个 epoll 来接收传入的事件并将它们放入作业队列。

当事件被放入作业队列时,pthread 条件信号被发送以唤醒工作线程。

但是,我遇到了一个问题,即所有工作线程都很忙,并且作业在队列中不断堆积。这是一个严重的问题,因为如果 Jobs 被堆叠起来,并且新事件在一段时间内没有出现,队列中的 Jobs 将不会被交给 Worker Threads。

一旦 Thread 可用,我希望他们可以自动从作业队列中获取作业(如果可能)。

有没有办法做到这一点?我能想到的就是.. 添加一个队列观察器并每隔一段时间发送一个条件信号。

此外,我知道 STL 队列不是线程安全的。这是否意味着我每次访问 STL 队列时都必须使用互斥锁?这不会减慢我的工作进程吗?

任何解决这个问题的建议都会很棒。

最佳答案

在生产者-消费者队列上对作业进行计数/发送信号的经典方法是使用信号量。生产者在插入一项工作后向其发出信号,而消费者在弹出一个工作之前等待它。您还需要在 push/pop 周围使用互斥锁来保护队列免受多次访问。

关于c++ - 线程池和作业队列架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611391/

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