最近有感而发,工作中用到的各种环境的多线程解决方案多之又多,再此先进行一些简单的整理以备不时之需。如果有不当之处敬请指正。

   各种环境下的线程实现方法

  1. CreateThread Win32提供的创建线程API
  2. mfc下提供的CWinThread类,和AfxBeginThread等等函数
  3. QT中的QThread
  4. Linux中Fork、exec簇函数、pthread库等。
  5. 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来实现

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐