这就是我想要做的:有一个主线程产生数字并将它们放入队列中,它触发一个消耗队列中数字的子线程。
如果队列的大小增长超过 10,主线程应该停止生成数字,如果队列的大小小于 5,它应该恢复数字生成。
queue<int> qu;
void *num_consumer(void *arg)
{
while(1) {
//lock qu
int num = qu.pop();
//unlock qu
do_something_with(num);
}
}
int main()
{
pthread_create(&tid, NULL, num_consumer, NULL);
while(1) {
int num;
produce(&num);
//lock qu
queue.push(num);
//unlock qu
if(qu.size() >= 10) {
//how to block and how to resume the main thread?
}
}
}
我可能会semaphore
用来做这项工作,但还有其他想法吗?