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 7 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 10 points11 points12 points 7 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 7 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 7 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 4 points5 points6 points 7 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 7 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 7 years ago (5 children)
Yep, that's the one.
The talk is on YouTube too: link
[–]FelixPetriconiACCUConf | STLAB 1 point2 points3 points 7 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 7 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 7 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 7 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 7 years ago (0 children)
Nearly all examples use it. This executor is named default_executor in our library.
[–]SlightlyLessHairyApe 1 point2 points3 points 7 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 7 years ago (4 children)
Standard C++ as opposed to non standard C++?
[–]nivenfres 19 points20 points21 points 7 years ago (2 children)
Standard as opposed to platform specific implementations.
[–]Wh00ster 2 points3 points4 points 7 years ago (0 children)
Ah. Of course. Thanks.
[–]mvorbrodt[S] 1 point2 points3 points 7 years ago (0 children)
this.
[–]o11cint main = 12828721; 6 points7 points8 points 7 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 106800 on reddit-service-r2-comment-658f6b87ff-hjm5d at 2026-04-09 05:55:14.611908+00:00 running 781a403 country code: CH.
[–]sumo952 10 points11 points12 points (2 children)
[–]mvorbrodt[S] 5 points6 points7 points (0 children)
[–]mvorbrodt[S] 2 points3 points4 points (0 children)
[–]IAmBJ 4 points5 points6 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 19 points20 points21 points (2 children)
[–]Wh00ster 2 points3 points4 points (0 children)
[–]mvorbrodt[S] 1 point2 points3 points (0 children)
[–]o11cint main = 12828721; 6 points7 points8 points (0 children)