我有以下场景:我有一个应该填充的线程
具有整数对的容器(本质上是任务描述),我有一个大的
应该从此容器中获取元素并执行的工作线程数(8-16)
一些工作.
具有整数对的容器(本质上是任务描述),我有一个大的
应该从此容器中获取元素并执行的工作线程数(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);
- }