基于C++17的线程池
工作队列是处于运行状态的队列,是运行中的线程。
在线程池启动后,工作队列会一直运行任务队列中的任务,运行完一个后取下一个,如果任务队列没有任务则等待。
这里的任务指用户需要放到线程池里执行的函数。
关闭线程池后需要终止工作队列的线程。
任务队列是函数的队列,线程池会将传进来的函数“打包”,然后放入任务队列中
这些打包好的函数会被工作队列取出并执行
由于“任务队列”可能会被多个操作同时访问读写,所以需要使用互斥量加锁
同时,工作队列会因为任务队列没有任务进入等待状态,所以需要条件变量在任务队列有任务后通知正在等待的线程
根据线程池大小创建工作队列的线程,线程内部是循环,不停的从任务队列取函数运行
将传入的函数和其参数“打包”,并放入任务队列中,然后通知正在等待的线程取任务执行
这部分我将其放在了析构函数里,通过一个“运行标记”记录当前线程池的状态
在析构函数中将其标记为“停止”,这样工作队列的线程检测到标记后,就会退出其所在的线程