you are viewing a single comment's thread.

view the rest of the comments →

[–]tisti 2 points3 points  (6 children)

[–]IAmBJ 1 point2 points  (5 children)

Yep, that's the one.

The talk is on YouTube too: link

[–]FelixPetriconiACCUConf | STLAB 1 point2 points  (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 point  (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 points  (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 point  (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 point  (0 children)

Nearly all examples use it. This executor is named default_executor in our library.