Skip to content

Ginkgo-Biloba/ThreadPool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简单的线程池

线程池有两种,按照知乎网友的说法

第一种是适合把多线程当作异步使用的,比如 Windows API 或者 C# 里的那个。调用者直接扔一个 functor 过去就可以了,等到需要返回值的时候同步一下。

第二种是主线程需要多次 spawn 出很多子线程的情况。这经常需要详细控制线程个数,并且主线程会等待子线程都完成之后才继续。

代码里面,第一种是 AsyncPool,第二种是 SyncPool。不能跨进程使用。

SyncPool 的基本思路抄自 OpenCV 的 parallel_impl.cpp

  • 能正常使用。不管异常安全。生命有限,不宜作死。
  • 对于不符合参数要求的调用,或者出各种问题的话,给出消息后直接挂掉。
  • 测试?封装?接口规范?复制过去能用就行了,要啥自行车。
  • 在 Windows 8.1 / 10.0.19045 上用 VS2019 / MinGW-w64 TDM-GCC 5.1.0 测试过。
  • Linux 系统在 x86_64 / aarch64 用 GCC 13.2 / 9.4 上测试过。
  • 因为专注计算量大的数值或者图像任务,所以不过多关注线程池本身的同步性能。
  • Windows 上使用 beginthreadex / Slim Reader/Writer (SRW) Locks + Condition Variables / Keyed Event。Windows Vista 及之后可用。
  • Linux 上使用 pthreads / futex

About

简单的同步/异步线程池

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages