c++ - 在 C++ 中构建多线程工作队列(消费者/生产者)

标签 c++ multithreading deque

我有以下场景:我有一个线程应该填充一个 带有整数对的容器(本质上是任务描述),我有一个很大的 应该从此容器中获取元素并执行的工作线程数 (8-16) 一些工作。

我认为这个问题可以通过阻塞队列轻松解决——例如在项目删除时,线程同步对队列的访问,如果没有可用数据则休眠。

我(也许是错误的)认为像这样的东西应该存在于 STL 或 boost 中,但我找不到任何东西。

我真的必须自己实现那个东西吗?这似乎是一个常见的场景......

最佳答案

如果您自己实现它,则该实现应该是信号量、互斥锁和队列对象的相当简单的组合。

这是一些伪代码:

Produce{
    pthread_mutex_lock(&mutex);
    queue.push_back(someObjectReference);
    pthread_mutex_unlock(&mutex);
    sem_post(&availabilitySem);
}

Consume{
    sem_wait(&availabilitySem);
    pthread_mutex_lock(&mutex);
    queue.pop_front(someObjectReference);
    pthread_mutext_unlock(&mutex);
}

关于c++ - 在 C++ 中构建多线程工作队列(消费者/生产者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1826228/

相关文章:

c++ - 如何从文件中读取直到读取一个字符然后跳过一些字符并继续读取

c#:更好的线程架构

c++ - 如何只执行一次代码?

c++ - 在 visual studio 中调用 C/C++ 代码形成 fortran 程序? (如何在visual studio中编译混合的C和fortran代码)

python - 如果线程尚未运行则启动它

java - 线程的正确使用方法

c++ - STL 中的双端队列到底是什么?

Java双端队列toString方法覆盖左侧元素

c++ - 为 boost::deque 保留 block 分配器?

c++ - CreateWICTextureFromFile 返回 E_NOINTERFACE