Yes and No.
for std::thread
:
std::thread
constructor (thread
file) calls
_Launch
(xthread
file) which calls
_Thrd_startX
(xthread
file) which calls
_Thrd_start
(cthread.c
file) which calls
_beginthreadex
(cthread.c
file).
I don't have _beginthreadex
code, but in the file atlbase.h
, some microsoft developer left the following comment :
// _beginthreadex calls CreateThread which will set the last error
// value before it returns.
so no PPL involed.
But, std::async
calls concurrency::create_task
behind the scens, and then it will use the windows API based thread pool.
The background of my question is, does it make sense to use std::thread
for several tasks...?
I have used Casablanca which uses PPL. I also played with PPL as standalone.
I don't like it at all performance wise. my own threadpool + std::future
+ std::promise
were literally houndered times faster than concurrency::task
objects. It is really falls short against the C# version TPL
. I would only use it if performace does not matter for that project.