Threads in C++#
#include <thread>
Creating Threads is Far Too Easy#
No parameterization#
void f() { ... }
std::thread t(f);
std::bind
?#void f(int i) { ... }
std::thread t(f, 666);
Lambdas#
std::thread t([](){ ... });
Looks all pretty familiar, no?
Joinable vs. Detached#
Why wait for termination?
Wait for a calculation to finish
Distribute parallelizable algorithm over multiple CPUs
Graceful program termination
Synchronize caller with termination of
t
#t.join();
Why detach a thread?
Background service thread ⟶ program lifetime
Detach a thread#
t.detach();
Cornercases in Thread Lifetime#
What if the program terminates before a thread?
int main() { std::thread t([](){for(;;);}); }
On Linux, at least …
When a process terminates, all its threads terminate immediately
Can I terminate a thread without its cooperation?
In Linux, yes, theoretically
What happens with locked mutexes?
⟶ Cancellation hooks (hell!)
Portably, no!