前提
在关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(二)中我们介绍了动态线程池的动态是如何实现的。
至此,关于动态线程库的的整体概貌可以看到了,这一节,我们来探究下:线程池支持以哪种方式提交任务,任务如果要输入参数怎么解决?
接下来的解读中如有错误,请大家多多见谅,我也是边学习边理解。
以何种方式向线程池提交任务
从Hipe作者给出的示例中,有三种提交任务的方式:匿名函数,函数指针,std::bind。
那么submit
的背后是怎么做的?将相关代码整理如下:
总而言之,在submit
的背后使用了很多模板技术,但是整体下来,就是将以不同方式提交的任务保存到一个对象中,然后调用执行。
当然这里还有很多点没有介绍到的,有时间再拿出来一一填吧。
任务要有输入参数怎么办
上面的例子中,我们举例的三个函数都是无参的,那么有参的时候怎么办?
一个答案是:使用std::bind。
std::bind
允许我们将函数和其参数绑定到一起,如下:
这里我们再引申一下:如果函数的数是引用该怎么办?
总结
这一节简单介绍了线程池支持以哪种方式提交任务,任务如果要输入参数怎么解决,整体面貌给大家展现出来了,但是其中还有一些细节问题没有说清,不过不影响理解。
下一节我们会介绍当提交的任务有返回值时该怎么处理。