似乎有两种方法可以为boost线程创建线程池,因为boost线程不直接提供线程池。
第一个是
asio::io_service io_service;
asio::io_service::work work(io_service);
boost::thread_group threads;
for (std::size_t i = 0; i < my_thread_count; ++i)
threads.create_thread(boost::bind(&asio::io_service::run, &io_service));
io_service.post(boost::bind(an_expensive_calculation, 42));
io_service.post(boost::bind(a_long_running_task, 123));
io_service.stop();
threads.join_all();
第二个是从这里http://threadpool.sourceforge.net/
使用非官方线程池 void taskfunc();
// later on...
pool my_pool;
my_pool.schedule(&taskfunc);
我的问题是这两者中哪一种方法更好?两者之间是否有任何特定的优势?谢谢..