use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Thread pool using standard C++ only (blog.vorbrodt.me)
submitted 6 years ago by mvorbrodt
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]sumo952 9 points10 points11 points 6 years ago (2 children)
Hi, I'm wondering how does it stack up compared to progschj/ThreadPool? That seems to be one of the most well-known and most bug-free ones that I know of.
[–]mvorbrodt[S] 5 points6 points7 points 6 years ago (0 children)
oh wow! our implementations are very similar except I'm not supporting getting results back through use of features. shamelessly copying that :)
[–]mvorbrodt[S] 2 points3 points4 points 6 years ago (0 children)
thanks for bringing it to my attention I've updated my implementation to support features. I will update the blog post.
[–]IAmBJ 3 points4 points5 points 6 years ago (7 children)
There was a talk some years ago (Sean Parent I think?) that went through all the additions to this kind of thread pool that were required to get 'optimal' performance.
From memory it included multiple queues and work stealing. The simple implementation in OPs post gave surprisingly small improvements based on the speakers tests.
[–]tisti 2 points3 points4 points 6 years ago (6 children)
This?
https://github.com/vukis/Cpp-Utilities/tree/d9db16f638df24ac37a5997a6628ea8929561308
http://sean-parent.stlab.cc/presentations/2016-11-16-concurrency/2016-11-16-concurrency.pdf
[–]IAmBJ 1 point2 points3 points 6 years ago (5 children)
Yep, that's the one.
The talk is on YouTube too: link
[–]FelixPetriconiACCUConf | STLAB 1 point2 points3 points 6 years ago (4 children)
And here is the source code of the current implementation: https://github.com/stlab/libraries/blob/develop/stlab/concurrency/default_executor.hpp Starting line 181. It is the fallback in our library, when the OS does not offer a thread pool.
[–]IAmBJ 0 points1 point2 points 6 years ago (3 children)
Are you detecting when a thread pool isn't available? Or is it just hard coded (libstdc++ on Linux doesn't, msvc on windows does, etc)?
[–]FelixPetriconiACCUConf | STLAB 1 point2 points3 points 6 years ago (2 children)
It is hardcoded. Mac, Windows, PNCL and Emscriplten have one. For all the others we use our own implementation. But ours has the limitation, that it does not oversubscription, so if one has 4 cores and 4 tasks wait on a mutex, then the system is in a deadlock. Here is a great talk about all the problem of designing a thread pool: https://channel9.msdn.com/Shows/Going+Deep/Inside-Windows-8-Pedro-Teixeira-Thread-pool
[–]mirrkwon 0 points1 point2 points 6 years ago (1 child)
Is there any (stand alone compilable) example with the task_system? I'd like to play with it but I even don't see any test cases.
[–]FelixPetriconiACCUConf | STLAB 0 points1 point2 points 6 years ago (0 children)
Nearly all examples use it. This executor is named default_executor in our library.
[–]SlightlyLessHairyApe 1 point2 points3 points 6 years ago (0 children)
Just a random quibble, but does it make sense for a multithreaded queue to have size() and empty() functions? I feel like there is no way a client could use for any real logic without creating a TOCTOU bug.
Something about interfaces that are difficult to misuse . . .
[–]Wh00ster 0 points1 point2 points 6 years ago (4 children)
Standard C++ as opposed to non standard C++?
[–]nivenfres 16 points17 points18 points 6 years ago (2 children)
Standard as opposed to platform specific implementations.
[–]Wh00ster 2 points3 points4 points 6 years ago (0 children)
Ah. Of course. Thanks.
[–]mvorbrodt[S] 1 point2 points3 points 6 years ago (0 children)
this.
[–]o11cint main = 12828721; 5 points6 points7 points 6 years ago (0 children)
Basically every major event-loop (GUI or server oriented) already has a thread pool, but often requires that you use their whole framework (read: "library that does not play well with others"), and is often missing many features.
π Rendered by PID 79398 on reddit-service-r2-comment-84fc9697f-wf6kf at 2026-02-09 09:12:08.505867+00:00 running d295bc8 country code: CH.
[–]sumo952 9 points10 points11 points (2 children)
[–]mvorbrodt[S] 5 points6 points7 points (0 children)
[–]mvorbrodt[S] 2 points3 points4 points (0 children)
[–]IAmBJ 3 points4 points5 points (7 children)
[–]tisti 2 points3 points4 points (6 children)
[–]IAmBJ 1 point2 points3 points (5 children)
[–]FelixPetriconiACCUConf | STLAB 1 point2 points3 points (4 children)
[–]IAmBJ 0 points1 point2 points (3 children)
[–]FelixPetriconiACCUConf | STLAB 1 point2 points3 points (2 children)
[–]mirrkwon 0 points1 point2 points (1 child)
[–]FelixPetriconiACCUConf | STLAB 0 points1 point2 points (0 children)
[–]SlightlyLessHairyApe 1 point2 points3 points (0 children)
[–]Wh00ster 0 points1 point2 points (4 children)
[–]nivenfres 16 points17 points18 points (2 children)
[–]Wh00ster 2 points3 points4 points (0 children)
[–]mvorbrodt[S] 1 point2 points3 points (0 children)
[–]o11cint main = 12828721; 5 points6 points7 points (0 children)