最近有感而发,工作中用到的各种环境的多线程解决方案多之又多,再此先进行一些简单的整理以备不时之需。如果有不当之处敬请指正。
各种环境下的线程实现方法
- CreateThread Win32提供的创建线程API
- mfc下提供的CWinThread类,和AfxBeginThread等等函数
- QT中的QThread
- Linux中Fork、exec簇函数、pthread库等。
- boost::thread 即std::thread
在此就不展开篇幅一 一整理每种线程的用法了。 就简单的贴一些曾经看过的感觉比较有用的网址做一下备忘。
临界区、互斥量、信号量、事件的区别。
linux多线程
QThread的用法
Qt同步线程
c++11的std::thread同boost::thread
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行。
不管使用任何线程创建方式,只要理解线程池的应用原来,都可以通过合理的设计实现线程池。但是实现的复杂程度则差异巨大。此处介绍几种使用boost来实现线程池的简单方法。
1、基于boost::threadpool实现线程池
2、基于boost::thread_group 实现线程池
3、直接基于io_context_pool来实现