在C中构建多线程工作队列(使用者/生产者)

我有以下场景:我有一个应该填充的线程
具有整数对的容器(本质上是任务描述),我有一个大的
应该从此容器中获取元素并执行的工作线程数(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++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...